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获取豆瓣电影简介代码分享
Jan 16 Python
Python实现telnet服务器的方法
Jul 10 Python
python 捕获shell脚本的输出结果实例
Jan 04 Python
Python with语句上下文管理器两种实现方法分析
Feb 09 Python
python多进程提取处理大量文本的关键词方法
Jun 05 Python
使用python画个小猪佩奇的示例代码
Jun 06 Python
Win8.1下安装Python3.6提示0x80240017错误的解决方法
Jul 31 Python
TensorFlow卷积神经网络之使用训练好的模型识别猫狗图片
Mar 14 Python
详解python中eval函数的作用
Oct 22 Python
Python3 利用face_recognition实现人脸识别的方法
Mar 13 Python
python爬虫使用scrapy注意事项
Nov 23 Python
基于pycharm 项目和项目文件命名规则的介绍
Jan 15 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
PHP中Session的概念
2006/10/09 PHP
php实现过滤表单提交中html标签的方法
2014/10/17 PHP
php实现事件监听与触发的方法
2014/11/21 PHP
thinkphp中ajax与php响应过程详解
2014/12/08 PHP
laravel5.6 框架操作数据 Eloquent ORM用法示例
2020/01/26 PHP
js保存当前路径(cookies记录)
2010/12/14 Javascript
将Datatable转化成json发送前台实现思路
2013/09/06 Javascript
wap浏览自动跳转到wap页面的js代码
2014/05/17 Javascript
js实现简单折叠、展开菜单的方法
2015/08/28 Javascript
详解Javascript中的Object对象
2016/02/28 Javascript
原生js获取浏览器窗口及元素宽高常用方法集合
2017/01/18 Javascript
AngularJS自定义指令实现面包屑功能完整实例
2017/05/17 Javascript
Node.js  REPL (交互式解释器)实例详解
2017/08/06 Javascript
Node.js 的模块知识汇总
2017/08/16 Javascript
动态加载、移除js/css文件的示例代码
2018/03/20 Javascript
使用vue-cli创建项目的图文教程(新手入门篇)
2018/05/02 Javascript
JS实现区分中英文并统计字符个数的方法示例
2018/06/09 Javascript
vue.js+elementUI实现点击左右箭头切换头像功能(类似轮播图效果)
2019/09/05 Javascript
jQuery实现简单轮播图效果
2020/12/27 jQuery
[15:35]教你分分钟做大人:天怒法师
2014/10/30 DOTA
Python实现统计英文单词个数及字符串分割代码
2015/05/28 Python
深入理解python多进程编程
2016/06/12 Python
Python爬虫框架scrapy实现downloader_middleware设置proxy代理功能示例
2018/08/04 Python
python使用Matplotlib绘制分段函数
2018/09/25 Python
python实现比较类的两个instance(对象)是否相等的方法分析
2019/06/26 Python
python如何通过twisted搭建socket服务
2020/02/03 Python
python绘制玫瑰的实现代码
2020/03/02 Python
python实现在线翻译
2020/06/18 Python
python中数字是否为可变类型
2020/07/08 Python
吃透移动端 Html5 响应式布局
2019/12/16 HTML / CSS
英国老牌潮鞋店:Offspring
2019/08/19 全球购物
计算机专业应届毕业生自荐信
2013/09/26 职场文书
医学生实习自荐信
2013/10/01 职场文书
“九一八事变纪念日”国旗下讲话稿
2014/09/14 职场文书
MySQL中VARCHAR与CHAR格式数据的区别
2021/05/26 MySQL
SpringBoot+VUE实现数据表格的实战
2021/08/02 Java/Android