使用Python、OpenCV进行图像接缝雕刻
使用Python、OpenCV进行图像接缝雕刻
- 1. 效果图
- 2. 原理
- 3. 安装——鉴于算法的专利原因,0.16以上版本均去掉了接缝雕刻算法;
- 4. 源码
- 参考
这篇博客将介绍基于图像内容感知调整的接缝雕刻算法。Avidan和Shimar证明了接缝雕刻不仅可以用于缩小图像尺寸,还可以用于增大图像尺寸;然而,scikit图像实现目前只支持下采样。
接缝雕刻算法也有它的局限性,对于接缝雕刻,该缺陷表现为图像的重要语义信息被部分破坏或完全切断,视觉效果不佳。
1. 效果图
原始图 VS 水平接缝效果图
如下图,可以看到已经从图像中删除了垂直接缝,从而减小了图像宽度。
也可以通过移除水平接缝来降低图像高度:
原始图 VS 垂直接缝效果图
如下图,可以看到已经从图像中删除了水平接缝,从而减小了图像高度。
根据原始图像计算能量图(即梯度图)
2. 原理
接缝雕刻算法是什么?
接缝雕刻算法通过移除/添加低能量的接缝来调整图像的大小(包括上采样和下采样)。
接缝定义为从左到右或从上到下流动的连接像素,前提是它们穿过图像的整个宽度/高度。
调用 transfrom.seam_carve(image, mag, ‘vertical’, numSeams) 来进行接缝雕刻
- 原始图像,要调整大小的输入图像。
- 能量图,可以从原始图像得到能量图。能量图应该代表图像中最显著的区域。通常是梯度幅度表示(即Sobel、Scharr等算子的输出)、熵映射或显著性映射。使用此图像作为输入,可以计算梯度大小作为能量图;
- 方向 垂直或水平
- 移除的像素大小
接缝雕刻算法原理?
接缝雕刻算法的工作原理是寻找连接的像素,称为低能量(即最不重要的)接缝,从左到右或从上到下遍历整个图像。
然后从原始图像中删除这些接缝,允许调整图像大小,同时保留最显著的区域(原始算法还支持添加接缝,允许增加图像大小)。
这些接缝通过动态规划有效地计算,并按其能量排序。低能量接缝放在列表的前面,而高能量接缝放在列表的后面。
调整图像的大小,可以移除能量较低的接缝以对图像进行下采样,或者复制能量较低的接缝以对图像进行上采样。
接缝雕刻的目的是调整图像本身的大小,并且仍然保留图像中最显著(即“有趣”)的区域。
使用传统的调整大小的方法会改变整个图像的尺寸,而不需要考虑确定图像的哪个部分最重要或最不重要。
Seam carving应用从能量图导出的启发式/路径查找来确定可以删除/复制图像的哪些区域,以确保(1)保留图像的所有“有趣”区域,(2)以美观的方式完成。
以一种美观的方式保存图像中最有趣的区域要比听起来困难得多。虽然接缝雕刻看起来很神奇,但实际上并非如此——而且它也有其局限性。接缝雕刻也有其局限性;
3. 安装——鉴于算法的专利原因,0.16以上版本均去掉了接缝雕刻算法;
安装哪个版本可参考:这个网站
如下,比0.16版本低的均可一试;本文用如下版本ok;
- windows 10
- python 3.7.4
- numpy 1.19.5+mkl
- scipy 1.6.0
- scikit-learn 0.24.1
- scikit-image 0.14.4
4. 源码
# USAGE
# python seam_carving.py --image images/as.jpg
# python seam_carving.py --image images/as.jpg --direction horizontalimport argparseimport cv2
import imutils
from skimage import filters
# 导入必要的包
from skimage import transform# 构建命令行参数及解析
# --image 输入图像路径
# --direction 应用接缝雕刻,移除相同像素的方向 水平或垂直
ap = argparse.ArgumentParser()
ap.add_argument("-i", "--image", required=True,help="path to input image file")
ap.add_argument("-d", "--direction", type=str,default="vertical", help="seam removal direction")
args = vars(ap.parse_args())# 加载图像,并转换为灰度图
image = cv2.imread(args["image"])
image = imutils.resize(image, width=250)
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)# 计算Sobel梯度幅值表示(即能量图)
mag = filters.sobel(gray.astype("float"))
cv2.imshow("mag", mag)
cv2.waitKey(0)# 展示原始图像
cv2.imshow("Original", image)
# cv2.waitKey(0)# 函数只支持下采样图像-不提供上采样支持。
# 遍历接缝上打圈以移除
for numSeams in range(20, 80, 20):# 执行接缝雕刻,移除图像中的帧数--“垂直”剪切将更改图像高度,“水平”剪切更改图像宽度carved = transform.seam_carve(image, mag, args["direction"],numSeams)# 新的雕刻图像尺寸打印到终端print("[INFO] removing {} seams; new size: ""w={}, h={}".format(numSeams, carved.shape[1],carved.shape[0]))# 展示雕刻算法的输出cv2.imshow("Carved", carved)cv2.waitKey(0)
参考
- https://www.pyimagesearch.com/2017/01/23/seam-carving-with-opencv-python-and-scikit-image/
- https://cloud.tencent.com/developer/article/1369676
使用Python、OpenCV进行图像接缝雕刻相关推荐
- Python+OpenCV:图像修复(Image Inpainting)
Python+OpenCV:图像修复(Image Inpainting) 理论 Most of you will have some old degraded photos at your home ...
- Python+OpenCV:图像二进制鲁棒独立基本特征(BRIEF, Binary Robust Independent Elementary Features)
Python+OpenCV:图像二进制鲁棒独立基本特征(BRIEF, Binary Robust Independent Elementary Features) 理论 We know SIFT us ...
- Python+OpenCV:图像快速角点检测算法(FAST Algorithm for Corner Detection)
Python+OpenCV:图像快速角点检测算法(FAST Algorithm for Corner Detection) 理论 Feature Detection using FAST Select ...
- Python+OpenCV:图像Shi-Tomasi角点检测器
Python+OpenCV:图像Shi-Tomasi角点检测器 理论 The scoring function in Harris Corner Detector was given by: Inst ...
- Python+OpenCV:图像Harris角点检测(Harris Corner Detection)
Python+OpenCV:图像Harris角点检测(Harris Corner Detection) 理论 corners are regions in the image with large v ...
- Python+OpenCV:图像对比度受限自适应直方图均衡化(CLAHE, Contrast Limited Adaptive Histogram Equalization)
Python+OpenCV:图像对比度受限自适应直方图均衡化(CLAHE, Contrast Limited Adaptive Histogram Equalization) ############ ...
- Python+OpenCV:图像轮廓
Python+OpenCV:图像轮廓 轮廓是什么? 轮廓可以简单地解释为一条连接所有连续点(沿边界)的曲线,具有相同的颜色和强度. 轮廓线是形状分析.目标检测和识别的重要工具. 为了获得更好的精度,可 ...
- Python+OpenCV:图像金字塔
Python+OpenCV:图像金字塔 理论 通常情况下,我们使用固定大小的图像.但在某些情况下,我们需要处理(相同的)不同分辨率的图像. 例如,当搜索图像中的某些东西时,比如脸,我们不确定该物体在图 ...
- Python+OpenCV:图像梯度
Python+OpenCV:图像梯度(Image Gradients) 理论 OpenCV提供了三种类型的梯度滤波器或高通滤波器,Sobel, Scharr和Laplacian. 1. Sobel和S ...
最新文章
- 使用inno setup打包程序完整脚本(.net框架检测,重复安装检测)
- SSH框架中配置log4j的方法
- 【CI】CN.一种多尺度协同变异的微粒群优化算法
- 证明kruskal算法求解图的最小生成树具有贪心选择性质_将并查集应用在图论中的最小生成树算法——Kruskal...
- tcp udp区别优缺点_一文搞懂TCP与UDP的区别
- asterisk 基本配置
- 授人以鱼不如授人以渔
- 多线程面试题c Linux,【多线程Linux面试题】面试问题:小伙用C语言熬… - 看准网...
- c++时间片轮转rr进程调度算法_「学习笔记」时间片轮转(RR)调度算法(详解版)...
- HTM服务器l控件与WEB服务器控件(一)
- oracle如何修改字段为空的为0,Oracle中字段为空处理成0
- Web前端开发技术(第3版)储久良 12.6综合实例
- 巨头垂涎却不能染指,loT数据库风口已至
- 泛微协同办公e-cology9.0的Ecode二次开发实例说明
- 中专计算机专业execl教案,信息技术excel教案
- 一洗大增大膏是真的吗_久久享欲增大膏跟一洗大结合真的有那么神奇吗?
- 5月6阴阳师服务器维护,阴阳师正式服5月6日更新公告
- 如何改typecho主题头像_零成本搭建hexo个人博客(二)--修改主题
- python爬虫爬妹子图_【爬虫】直接上干货-爬取妹子图整站图片
- 请问如何快速画出此图的盒图
热门文章
- 【CV】Pytorch一小时入门教程-代码详解
- C++ while 循环与 do...while 循环
- Android CheckBox 修改选择框
- Error: Default interface methods are only supported starting with Android N (--min-api 24): java.uti
- codeforces-1132 (div2)
- django系列 1 :python+django环境搭建 +mac提示找不到manage.py命令
- 2022-2028年中国绝缘栅双极晶体管(IGBT)行业投资分析及前景预测报告
- Go 学习笔记(48)— Go 标准库之 time (获取时/分/秒的单位值、标准时间和Unix时间转换、字符串时间和Time类型转换、时区转换、时间的加减/休眠)
- 用友二次开发——工资导入
- 安装centos 7 桌面