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使用reportlab实现图片转换成pdf的方法
May 22 Python
python如何让类支持比较运算
Mar 20 Python
Python实现的堆排序算法示例
Apr 29 Python
详解Python中的type和object
Aug 15 Python
python+mysql实现学生信息查询系统
Feb 21 Python
详解Selenium+PhantomJS+python简单实现爬虫的功能
Jul 14 Python
python并发编程多进程 互斥锁原理解析
Aug 20 Python
Python制作简易版小工具之计算天数的实现思路
Feb 13 Python
Python如何操作office实现自动化及win32com.client的运用
Apr 01 Python
Python3爬虫中Splash的知识总结
Jul 10 Python
如何使用python写截屏小工具
Sep 29 Python
python Scrapy爬虫框架的使用
Jan 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
虹吸式咖啡探讨–研磨
2021/03/03 冲泡冲煮
关于shopex同步ucenter的redirect问题,导致script不运行
2013/04/10 PHP
PHP中使用匿名函数操作数据库的例子
2014/11/17 PHP
php的mail函数发送UTF-8编码中文邮件时标题乱码的解决办法
2015/10/20 PHP
php5.4传引用时报错问题分析
2016/01/22 PHP
php.ini中date.timezone设置详解
2016/11/20 PHP
详谈php ip2long 出现负数的原因及解决方法
2017/04/05 PHP
jquery DIV撑大让滚动条滚到最底部代码
2013/06/06 Javascript
使用JavaScript进行进制转换将字符串转换为十进制
2014/09/21 Javascript
jQuery easyui的validatebox校验规则扩展及easyui校验框validatebox用法
2016/01/18 Javascript
jQuery ajax方法传递中文时出现中文乱码的解决方法
2016/07/25 Javascript
js实现按钮控制带有停顿效果的图片滚动
2016/08/30 Javascript
使用Node.js给图片加水印的方法
2016/11/15 Javascript
利用Bootstrap实现表格复选框checkbox全选
2016/12/21 Javascript
JS实现的添加弹出层并完成锁屏操作示例
2017/04/07 Javascript
JS实现div模块的截图并下载功能
2017/10/17 Javascript
webpack+vue中使用别名路径引用静态图片地址
2017/11/20 Javascript
AngularJS标签页tab选项卡切换功能经典实例详解
2018/05/16 Javascript
JavaScript new对象的四个过程实例浅析
2018/07/31 Javascript
JavaScript插入排序算法原理与实现方法示例
2018/08/06 Javascript
Vue实现远程获取路由与页面刷新导致404错误的解决
2019/01/31 Javascript
微信小程序实现判断是分享到群还是个人功能示例
2019/05/03 Javascript
Vue中的循环及修改差值表达式的方法
2019/08/29 Javascript
解决antd的Form组件setFieldsValue的警告问题
2020/10/29 Javascript
[01:11]辉夜杯战队访谈宣传片—CDEC.Y
2015/12/26 DOTA
wxpython 学习笔记 第一天
2009/03/16 Python
二种python发送邮件实例讲解(python发邮件附件可以使用email模块实现)
2013/12/03 Python
Python3 操作符重载方法示例
2017/11/23 Python
对django2.0 关联表的必填on_delete参数的含义解析
2019/08/09 Python
详解python列表(list)的使用技巧及高级操作
2019/08/15 Python
python GUI库图形界面开发之PyQt5多线程中信号与槽的详细使用方法与实例
2020/03/08 Python
python3中sys.argv的实例用法
2020/04/24 Python
Alpine安装Python3依赖出现的问题及解决方法
2020/12/25 Python
机修工工作职责
2014/02/21 职场文书
特教教师先进事迹
2014/05/21 职场文书
小班上学期幼儿评语
2014/12/30 职场文书