OpenCV 图像梯度的实现方法


Posted in Python onJuly 25, 2021

概述

OpenCV 是一个跨平台的计算机视觉库, 支持多语言, 功能强大. 今天小白就带大家一起携手走进 OpenCV 的世界.

梯度运算

梯度: 膨胀 (Dilating) - 腐蚀 (Eroding).

例子:

# 读取图片
pie = cv2.imread("pie.png")

# 核
kernel = np.ones((7, 7), np.uint8)

# 计算梯度
gradient = cv2.morphologyEx(pie, cv2.MORPH_GRADIENT, kernel=kernel)

# 图片展示
cv2.imshow("gradient", gradient)
cv2.waitKey(0)
cv2.destroyAllWindows()

输出结果:

OpenCV 图像梯度的实现方法

礼帽

礼帽 (Top Hat): 原始输入 - 开运算结果.

例子:

# 读取图片
img = cv2.imread("white.png")

# 核
kernel = np.ones((7, 7), np.uint8)

# 礼帽
tophat = cv2.morphologyEx(img, cv2.MORPH_TOPHAT, kernel=kernel)

# 图片展示
cv2.imshow("tophat", tophat)
cv2.waitKey(0)
cv2.destroyAllWindows()

输出结果:

OpenCV 图像梯度的实现方法

黑帽

黑帽 (Black Hat): 闭运算 - 原始输入.

例子:

# 读取图片
img = cv2.imread("white.png")

# 核
kernel = np.ones((7, 7), np.uint8)

# 礼帽
blackhat = cv2.morphologyEx(img, cv2.MORPH_BLACKHAT, kernel=kernel)

# 图片展示
cv2.imshow("blackhat", blackhat)
cv2.waitKey(0)
cv2.destroyAllWindows()

输出结果:

OpenCV 图像梯度的实现方法

Sobel 算子

Sobel 算子 (Sobeloperator) 是边缘检测中非常重要的一个算子. Sobel 算子是一类离散性差分算子, 用来运算图像高亮度函数的灰度之近似值.

格式:

cv2.Sobel(src, ddepth, dx, dy, ksize)

参数:

  • src: 原图
  • ddepth: 图片深度
  • dx: 水平方向
  • dy: 竖直方向
  • ksize: 算子大小

计算 x

代码:

# 读取图片
img = cv2.imread("pie.png")

# Sobel算子
sobelx = cv2.Sobel(img, -1, 1, 0, ksize=3)

# 展示图片
cv2.imshow("sobelx", sobelx)
cv2.waitKey(0)
cv2.destroyAllWindows()

输出结果:

OpenCV 图像梯度的实现方法

计算 y

代码:

# 读取图片
img = cv2.imread("pie.png")

# Sobel算子
sobely = cv2.Sobel(img, -1, 0, 1, ksize=3)

# 展示图片
cv2.imshow("sobely", sobely)
cv2.waitKey(0)
cv2.destroyAllWindows()

输出结果:

OpenCV 图像梯度的实现方法

计算 x+y

代码:

# 读取图片
img = cv2.imread("pie.png")

# Sobel算子
sobel = cv2.Sobel(img, -1, 1, 1, ksize=3)

# 展示图片
cv2.imshow("sobel", sobel)
cv2.waitKey(0)
cv2.destroyAllWindows()

输出结果:

OpenCV 图像梯度的实现方法

融合

代码:

# Sobel算子
sobelx = cv2.Sobel(img, cv2.CV_64F, 1, 0, ksize=3)
sobely = cv2.Sobel(img, cv2.CV_64F, 0, 1, ksize=3)

# 转换成绝对值
sobelx = cv2.convertScaleAbs(sobelx)
sobely = cv2.convertScaleAbs(sobely)

# 融合
sobel_xy = cv2.addWeighted(sobelx, 0.5, sobely, 0.5, 0)

# 展示图片
cv2.imshow("sobel_xy", sobel_xy)
cv2.waitKey(0)
cv2.destroyAllWindows()

输出结果:

OpenCV 图像梯度的实现方法

注: 当 ddepth 设置为 -1, 即与原图保持一致, 得到的结果可能是错误的. 计算梯度值可能出现负数, 负数会自动截断为 0. 为了避免信息丢失, 我们需要使用更高是数据类型 cv2.CV_64F, 再通过取绝对值将其映射到 cv2.CV_8U 类型.

到此这篇关于OpenCV 图像梯度的实现方法的文章就介绍到这了,更多相关OpenCV 图像梯度内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python使用rsa加密算法模块模拟新浪微博登录
Jan 22 Python
使用Python3中的gettext模块翻译Python源码以支持多语言
Mar 31 Python
安装dbus-python的简要教程
May 05 Python
Python连接DB2数据库
Aug 27 Python
解决pyqt中ui编译成窗体.py中文乱码的问题
Dec 23 Python
详解pyqt5 动画在QThread线程中无法运行问题
May 05 Python
python实现二维数组的对角线遍历
Mar 02 Python
python批量修改文件夹及其子文件夹下的文件内容
Mar 15 Python
django认证系统实现自定义权限管理的方法
Aug 28 Python
python科学计算之numpy——ufunc函数用法
Nov 25 Python
pytorch中交叉熵损失(nn.CrossEntropyLoss())的计算过程详解
Jan 02 Python
python中sqllite插入numpy数组到数据库的实现方法
Jun 21 Python
ROS系统将python包编译为可执行文件的简单步骤
Jul 25 #Python
Pandas自定义选项option设置
Jul 25 #Python
Pandas 稀疏数据结构的实现
Jul 25 #Python
Python中rapidjson参数校验实现
Jul 25 #Python
理解python中装饰器的作用
Jul 21 #Python
opencv检测动态物体的实现
Python爬虫中urllib3与urllib的区别是什么
You might like
SWFUpload与CI不能正确上传识别文件MIME类型解决方法分享
2011/04/18 PHP
php简单实现数组分页的方法
2016/04/30 PHP
php实现HTML实体编号与非ASCII字符串相互转换类实例
2016/11/02 PHP
javascript 命名规则 变量命名规则
2010/02/25 Javascript
浅谈jQuery事件绑定原理
2015/01/02 Javascript
JS上传图片前实现图片预览效果的方法
2015/03/02 Javascript
jQuery如何使用自动触发事件trigger
2015/11/29 Javascript
Bootstrap树形组件jqTree的简单封装
2016/01/25 Javascript
JavaScript中循环遍历Array与Map的方法小结
2016/03/12 Javascript
JavaScript的变量声明提升问题浅析(Hoisting)
2016/11/30 Javascript
浅谈JavaScript的计时器对象
2016/12/26 Javascript
利用JS hash制作单页Web应用的方法详解
2017/10/10 Javascript
javascript函数的节流[throttle]与防抖[debounce]
2017/11/15 Javascript
node之本地服务器图片上传的方法示例
2019/03/26 Javascript
[03:53]2016国际邀请赛中国区预选赛第三日TOP10精彩集锦
2016/06/29 DOTA
python 排列组合之itertools
2013/03/20 Python
详解Python爬虫的基本写法
2016/01/08 Python
深入浅析python继承问题
2016/05/29 Python
Python如何实现守护进程的方法示例
2017/02/08 Python
Python实现基本数据结构中队列的操作方法示例
2017/12/04 Python
Python模块搜索路径代码详解
2018/01/29 Python
Python基础之循环语句用法示例【for、while循环】
2019/03/23 Python
使用Pandas对数据进行筛选和排序的实现
2019/07/29 Python
捷克钓鱼用品网上商店:Parys.cz
2018/06/15 全球购物
"引用"与指针的区别是什么
2016/09/07 面试题
两道JAVA笔试题
2016/09/14 面试题
受欢迎的大学生自我评价
2013/12/05 职场文书
事业单位接收函
2014/01/10 职场文书
请假条标准格式规范
2014/04/10 职场文书
公司离职证明范本(汇总)
2014/09/10 职场文书
顶岗实习协议书
2015/01/29 职场文书
就业意向书范本
2015/05/11 职场文书
生日寿星公答谢词
2015/09/29 职场文书
创业计划书之密室逃脱
2019/11/08 职场文书
nginx lua 操作 mysql
2022/05/15 Servers
PostgreSQL出现死锁该如何解决
2022/05/30 PostgreSQL