使用Python、OpenCV进行图像接缝雕刻

  • 1. 效果图
  • 2. 原理
  • 3. 安装——鉴于算法的专利原因,0.16以上版本均去掉了接缝雕刻算法;
  • 4. 源码
  • 参考

这篇博客将介绍基于图像内容感知调整的接缝雕刻算法。Avidan和Shimar证明了接缝雕刻不仅可以用于缩小图像尺寸,还可以用于增大图像尺寸;然而,scikit图像实现目前只支持下采样。

接缝雕刻算法也有它的局限性,对于接缝雕刻,该缺陷表现为图像的重要语义信息被部分破坏或完全切断,视觉效果不佳。

1. 效果图

原始图 VS 水平接缝效果图
如下图,可以看到已经从图像中删除了垂直接缝,从而减小了图像宽度。
也可以通过移除水平接缝来降低图像高度:

原始图 VS 垂直接缝效果图
如下图,可以看到已经从图像中删除了水平接缝,从而减小了图像高度。
根据原始图像计算能量图(即梯度图)

2. 原理

接缝雕刻算法是什么?

接缝雕刻算法通过移除/添加低能量的接缝来调整图像的大小(包括上采样和下采样)。
接缝定义为从左到右或从上到下流动的连接像素,前提是它们穿过图像的整个宽度/高度。

调用 transfrom.seam_carve(image, mag, ‘vertical’, numSeams) 来进行接缝雕刻

  • 原始图像,要调整大小的输入图像。
  • 能量图,可以从原始图像得到能量图。能量图应该代表图像中最显著的区域。通常是梯度幅度表示(即Sobel、Scharr等算子的输出)、熵映射或显著性映射。使用此图像作为输入,可以计算梯度大小作为能量图;
  • 方向 垂直或水平
  • 移除的像素大小

接缝雕刻算法原理?

  1. 接缝雕刻算法的工作原理是寻找连接的像素,称为低能量(即最不重要的)接缝,从左到右或从上到下遍历整个图像。

  2. 然后从原始图像中删除这些接缝,允许调整图像大小,同时保留最显著的区域(原始算法还支持添加接缝,允许增加图像大小)。

  3. 这些接缝通过动态规划有效地计算,并按其能量排序。低能量接缝放在列表的前面,而高能量接缝放在列表的后面。

  4. 调整图像的大小,可以移除能量较低的接缝以对图像进行下采样,或者复制能量较低的接缝以对图像进行上采样。

接缝雕刻的目的是调整图像本身的大小,并且仍然保留图像中最显著(即“有趣”)的区域。
使用传统的调整大小的方法会改变整个图像的尺寸,而不需要考虑确定图像的哪个部分最重要或最不重要。

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进行图像接缝雕刻相关推荐

  1. Python+OpenCV:图像修复(Image Inpainting)

    Python+OpenCV:图像修复(Image Inpainting) 理论 Most of you will have some old degraded photos at your home ...

  2. Python+OpenCV:图像二进制鲁棒独立基本特征(BRIEF, Binary Robust Independent Elementary Features)

    Python+OpenCV:图像二进制鲁棒独立基本特征(BRIEF, Binary Robust Independent Elementary Features) 理论 We know SIFT us ...

  3. Python+OpenCV:图像快速角点检测算法(FAST Algorithm for Corner Detection)

    Python+OpenCV:图像快速角点检测算法(FAST Algorithm for Corner Detection) 理论 Feature Detection using FAST Select ...

  4. Python+OpenCV:图像Shi-Tomasi角点检测器

    Python+OpenCV:图像Shi-Tomasi角点检测器 理论 The scoring function in Harris Corner Detector was given by: Inst ...

  5. Python+OpenCV:图像Harris角点检测(Harris Corner Detection)

    Python+OpenCV:图像Harris角点检测(Harris Corner Detection) 理论 corners are regions in the image with large v ...

  6. Python+OpenCV:图像对比度受限自适应直方图均衡化(CLAHE, Contrast Limited Adaptive Histogram Equalization)

    Python+OpenCV:图像对比度受限自适应直方图均衡化(CLAHE, Contrast Limited Adaptive Histogram Equalization) ############ ...

  7. Python+OpenCV:图像轮廓

    Python+OpenCV:图像轮廓 轮廓是什么? 轮廓可以简单地解释为一条连接所有连续点(沿边界)的曲线,具有相同的颜色和强度. 轮廓线是形状分析.目标检测和识别的重要工具. 为了获得更好的精度,可 ...

  8. Python+OpenCV:图像金字塔

    Python+OpenCV:图像金字塔 理论 通常情况下,我们使用固定大小的图像.但在某些情况下,我们需要处理(相同的)不同分辨率的图像. 例如,当搜索图像中的某些东西时,比如脸,我们不确定该物体在图 ...

  9. Python+OpenCV:图像梯度

    Python+OpenCV:图像梯度(Image Gradients) 理论 OpenCV提供了三种类型的梯度滤波器或高通滤波器,Sobel, Scharr和Laplacian. 1. Sobel和S ...

最新文章

  1. 使用inno setup打包程序完整脚本(.net框架检测,重复安装检测)
  2. SSH框架中配置log4j的方法
  3. 【CI】CN.一种多尺度协同变异的微粒群优化算法
  4. 证明kruskal算法求解图的最小生成树具有贪心选择性质_将并查集应用在图论中的最小生成树算法——Kruskal...
  5. tcp udp区别优缺点_一文搞懂TCP与UDP的区别
  6. asterisk 基本配置
  7. 授人以鱼不如授人以渔
  8. 多线程面试题c Linux,【多线程Linux面试题】面试问题:小伙用C语言熬… - 看准网...
  9. c++时间片轮转rr进程调度算法_「学习笔记」时间片轮转(RR)调度算法(详解版)...
  10. HTM服务器l控件与WEB服务器控件(一)
  11. oracle如何修改字段为空的为0,Oracle中字段为空处理成0
  12. Web前端开发技术(第3版)储久良 12.6综合实例
  13. 巨头垂涎却不能染指,loT数据库风口已至
  14. 泛微协同办公e-cology9.0的Ecode二次开发实例说明
  15. 中专计算机专业execl教案,信息技术excel教案
  16. 一洗大增大膏是真的吗_久久享欲增大膏跟一洗大结合真的有那么神奇吗?
  17. 5月6阴阳师服务器维护,阴阳师正式服5月6日更新公告
  18. 如何改typecho主题头像_零成本搭建hexo个人博客(二)--修改主题
  19. python爬虫爬妹子图_【爬虫】直接上干货-爬取妹子图整站图片
  20. 请问如何快速画出此图的盒图

热门文章

  1. 【CV】Pytorch一小时入门教程-代码详解
  2. C++ while 循环与 do...while 循环
  3. Android CheckBox 修改选择框
  4. Error: Default interface methods are only supported starting with Android N (--min-api 24): java.uti
  5. codeforces-1132 (div2)
  6. django系列 1 :python+django环境搭建 +mac提示找不到manage.py命令
  7. 2022-2028年中国绝缘栅双极晶体管(IGBT)行业投资分析及前景预测报告
  8. Go 学习笔记(48)— Go 标准库之 time (获取时/分/秒的单位值、标准时间和Unix时间转换、字符串时间和Time类型转换、时区转换、时间的加减/休眠)
  9. 用友二次开发——工资导入
  10. 安装centos 7 桌面