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从入门到精通(DAY 1)
Dec 20 Python
Python和JavaScript间代码转换的4个工具
Feb 22 Python
Python标准库06之子进程 (subprocess包) 详解
Dec 07 Python
python解析html提取数据,并生成word文档实例解析
Jan 22 Python
Python面向对象class类属性及子类用法分析
Feb 02 Python
Flask入门之上传文件到服务器的方法示例
Jul 18 Python
Python图像处理之图像的缩放、旋转与翻转实现方法示例
Jan 04 Python
Python秒算24点实现及原理详解
Jul 29 Python
Flask框架请求钩子与request请求对象用法实例分析
Nov 07 Python
Python实现老照片修复之上色小技巧
Oct 16 Python
分位数回归模型quantile regeression应用详解及示例教程
Nov 02 Python
Python+Matplotlib+LaTeX玩转数学公式
Feb 24 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
Thinkphp5框架实现图片、音频和视频文件的上传功能详解
2019/08/27 PHP
php 多进程编程父进程的阻塞与非阻塞实例分析
2020/02/22 PHP
JavaScript中this关键字使用方法详解
2007/03/08 Javascript
js call方法详细介绍(js 的继承)
2013/11/18 Javascript
CSS javascript 结合实现悬浮固定菜单效果
2015/08/23 Javascript
javascript每日必学之多态
2016/02/23 Javascript
AngularJS 中文API参考手册
2016/07/28 Javascript
详解微信小程序 页面跳转 传递参数
2016/12/08 Javascript
详解基于webpack和vue.js搭建开发环境
2017/04/05 Javascript
JavaScript使用readAsDataUrl方法预览图片
2017/05/10 Javascript
bootstrap3使用bootstrap datetimepicker日期插件
2017/05/24 Javascript
Vue 2.0学习笔记之Vue中的computed属性
2017/10/16 Javascript
原生JS实现网页手机音乐播放器 歌词同步播放的示例
2018/02/02 Javascript
jQuery实现点击自身以外区域关闭弹出层功能完整示例【改进版】
2018/07/31 jQuery
jQuery常见的遍历DOM操作详解
2018/09/05 jQuery
小程序简单两栏瀑布流效果的实现
2019/12/18 Javascript
2019最新21个MySQL高频面试题介绍
2020/02/06 Javascript
vue prop传值类型检验方式
2020/07/30 Javascript
Vue通过provide inject实现组件通信
2020/09/03 Javascript
[01:04:29]DOTA2-DPC中国联赛 正赛 Phoenix vs XG BO3 第二场 1月31日
2021/03/11 DOTA
Python 实现「食行生鲜」签到领积分功能
2018/09/26 Python
便捷提取python导入包的属性方法
2018/10/15 Python
对numpy下的轴交换transpose和swapaxes的示例解读
2019/06/26 Python
使用python将多个excel文件合并到同一个文件的方法
2019/07/09 Python
解决django同步数据库的时候app models表没有成功创建的问题
2019/08/09 Python
Django与pyecharts结合的实例代码
2020/05/13 Python
tensorflow转换ckpt为savermodel模型的实现
2020/05/25 Python
浅谈python opencv对图像颜色通道进行加减操作溢出
2020/06/03 Python
Python如何输出整数
2020/06/07 Python
python实现数字炸弹游戏
2020/07/17 Python
澳大利亚旅游网站:Lastminute
2017/08/07 全球购物
机电一体化求职信
2014/03/10 职场文书
2014年物流工作总结
2014/11/25 职场文书
Go语言设计模式之结构型模式
2021/06/22 Golang
微软Win11什么功能最惊艳? Windows11新功能特性汇总
2021/11/21 数码科技
vue实现列表垂直无缝滚动
2022/04/08 Vue.js