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中使用urllib2模块编写爬虫的简单上手示例
Jan 20 Python
对比Python中__getattr__和 __getattribute__获取属性的用法
Jun 21 Python
对python-3-print重定向输出的几种方法总结
May 11 Python
numpy数组广播的机制
Jul 12 Python
TensorFlow基于MNIST数据集实现车牌识别(初步演示版)
Aug 05 Python
Python高级property属性用法实例分析
Nov 19 Python
python使用pymongo与MongoDB基本交互操作示例
Apr 09 Python
TensorFLow 数学运算的示例代码
Apr 21 Python
解决echarts中饼图标签重叠的问题
May 16 Python
python的数学算法函数及公式用法
Nov 18 Python
python 中 .py文件 转 .pyd文件的操作
Mar 04 Python
python3美化表格数据输出结果的实现代码
Apr 14 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中比较简单的导入phpmyadmin生成的sql文件的方法
2011/06/28 PHP
PHP写的获取各搜索蜘蛛爬行记录代码
2012/08/21 PHP
解决PHP4.0 和 PHP5.0类构造函数的兼容问题
2013/08/01 PHP
ThinkPHP实现带验证码的文件上传功能实例
2014/11/01 PHP
PHP中使用file_get_contents抓取网页中文乱码问题解决方法
2014/12/17 PHP
Yii2框架中日志的使用方法分析
2017/05/22 PHP
Laravel 集成 Geetest验证码的方法
2018/05/14 PHP
在php的yii2框架中整合hbase库的方法
2018/09/20 PHP
PHP实现字母数字混合验证码功能
2019/07/11 PHP
JavaScript中使用构造函数实现继承的代码
2010/08/12 Javascript
用js判断页面刷新或关闭的方法(onbeforeunload与onunload事件)
2012/06/22 Javascript
js操作css属性实现div层展开关闭效果的方法
2015/05/11 Javascript
JavaScript中的call方法和apply方法使用对比
2015/08/12 Javascript
jQuery手动点击实现图片轮播特效
2020/04/20 Javascript
JavaScript实现跑马灯抽奖活动实例代码解析与优化(二)
2016/02/16 Javascript
深入浅析javascript中的作用域(推荐)
2016/07/19 Javascript
Javascript 调用 ActionScript 的简单方法
2016/09/22 Javascript
微信小程序 实战程序简易新闻的制作
2017/01/09 Javascript
使用openSpeDiv方法实现Ecshop登录弹窗框效果
2017/03/13 Javascript
jQuery正则验证注册页面经典实例
2017/06/10 jQuery
Angular4编程之表单响应功能示例
2017/12/13 Javascript
vue-scroller记录滚动位置的示例代码
2018/01/17 Javascript
微信小程序methods中定义的方法互相调用的实例代码
2018/08/07 Javascript
vue3 watch和watchEffect的使用以及有哪些区别
2021/01/26 Vue.js
python简单的函数定义和用法实例
2015/05/07 Python
python 把数据 json格式输出的实例代码
2016/10/31 Python
详解pandas如何去掉、过滤数据集中的某些值或者某些行?
2019/05/15 Python
CSS实现聊天气泡效果
2020/04/26 HTML / CSS
购买大码女装:Lane Bryant
2016/09/07 全球购物
澳大利亚百货公司:David Jones
2018/02/08 全球购物
四群教育工作实施方案
2014/03/26 职场文书
爱祖国演讲稿
2014/05/04 职场文书
2014向国旗敬礼网上签名活动总结
2014/09/27 职场文书
小学班主任工作经验交流材料
2015/11/02 职场文书
《一面五星红旗》教学反思
2016/02/23 职场文书
导游词之金鞭溪风景区
2019/09/12 职场文书