IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> [我的OpenCV学习日志]--4 2021/10/26 -> 正文阅读

[人工智能][我的OpenCV学习日志]--4 2021/10/26

目录

一、礼帽与黑帽

二、图像梯度——Sobel算子

?三、图像梯度——Scharr算子;Laplacian算子


一、礼帽与黑帽

(1)礼帽 = 原始输入 - 开运算结果

(2)黑帽 = 闭运算 - 原始输入

用处

(1)礼帽运算:原图像和开运算结果图之差,常用来分离比邻近点亮一些的斑块,在一幅图像具有大幅的背景而微小物品比较有规律的情况下,可以使用礼帽运算进行背景提取

(2)黑帽运算:突出了比原图像轮廓周围的区域更暗的区域,所以用来分离比邻近点暗一些的斑块,效果图有着非常完美的轮廓

#礼帽
img = cv2.imread('D:/fushi2.jpg')
tophat = cv2.morphologyEx(img,cv2.MORPH_TOPHAT,kernel)
cv_show('tophat',tophat)

#黑帽
img = cv2.imread('D:/fushi2.jpg')
blackhat = cv2.morphologyEx(img,cv2.MORPH_BLACKHAT,kernel)
cv_show('blackhat',blackhat)

?

?

二、图像梯度——Sobel算子

(1)什么是图像梯度?

在我的理解中,一个图像是清晰还是模糊主要取决于图像的轮廓是否明显,即轮廓边缘的灰度变化强不强烈,图像的梯度就相当于2个相邻像素之间的差值。

(2)在图像中,该算子的大致作用就是找出图中哪些地方存在梯度,即找出图像边缘轮廓,可用于边缘检测

这是一个卷积乘

img = cv2.imread('D:/fzdsuanzi.jpg',cv2.IMREAD_GRAYSCALE)
cv_show('img',img)

?原图:

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

-ddepth:图像的深度

-dx和dy分别表示水平和竖直方向

-ksize是sobel算子的大小

注:在梯度运算中,很可能会出现负的灰度值,我们不能再采用uint8类型作为像素的数据类型,而是采用了CV_64F这种有负数范围的类型,运算结果里的负数我们也不能不处理,否则在显示的时候就会被截断为0,这样就会丢失边界信息。convertScaleAbs函数就是把梯度运算后的图像给正值化,也就是取绝对值

————————————————
版权声明:本文为CSDN博主「naruhina」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/naruhina/article/details/104710805/

sobelx = cv2.Sobel(img,cv2.CV_64F,1,0,ksize = 3)#cv2.CV_64f的意思是cv2.CV_64F输出图像的深度(数据类型),可以使用-1,与原图像保持一致
sobelx = cv2.convertScaleAbs(sobelx)白到黑是正数,黑到白是负数,所有的负数会被截断成0,所以要取绝对值
cv_show('sobelx',sobelx)

?

?

sobely = cv2.Sobel(img,cv2.CV_64F,0,1,ksize = 3)
sobely = cv2.convertScaleAbs(sobely)
cv_show('sobely',sobely)

?

分别计算x,y再求和

sobelxy = cv2.addWeighted(sobelx,0.5,sobely,0.5,0)
cv_show('sobelxy',sobelxy)

?

不建议直接计算,原因如下:

sobelxy = cv2.Sobel(img,cv2.CV_64F,1,1,ksize = 3)
sobelxy = cv2.convertScaleAbs(sobelxy)
cv_show('sobelxy',sobelxy)

?

?三、图像梯度——Scharr算子;Laplacian算子

1.不同算子的卷积核数值有一些差异。

2.scharr与sobel算子思想一样,只是卷积核的系数不同,scharr算子提取边界也更加灵敏,能提取到更细小的边界,但请注意,越是灵敏就越是可能误判。

3.Laplacian 算子对噪声比较敏感,所以图像一般先经过平滑处理。一般情况下都是将Laplacian算子与其他方法结合一起使用,并不是经常单独使用该算子。

#不同算子之间的差异
import numpy as np
img = cv2.imread('D:/fzdsuanzi.jpg',cv2.IMREAD_GRAYSCALE)
sobelx = cv2.Sobel(img,cv2.CV_64F,1,0,ksize = 3)
sobelx = cv2.convertScaleAbs(sobelx)
sobely = cv2.Sobel(img,cv2.CV_64F,0,1,ksize = 3)
sobely = cv2.convertScaleAbs(sobely)
sobelxy = cv2.addWeighted(sobelx,0.5,sobely,0.5,0)

scharrx = cv2.Scharr(img,cv2.CV_64F,1,0)
scharry = cv2.Scharr(img,cv2.CV_64F,0,1)
scharrx = cv2.convertScaleAbs(scharrx)
scharry = cv2.convertScaleAbs(scharry)
scharrxy = cv2.addWeighted(scharrx,0.5,scharry,0.5,0)

laplacian = cv2.Laplacian(img,cv2.CV_64F)
laplacian = cv2.convertScaleAbs(laplacian)

res = np.hstack((sobelxy,scharrxy,laplacian))
cv_show('res',res)

Scharr算子提取出的轮廓与原图的对比:

?

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-10-27 12:50:24  更:2021-10-27 12:50:57 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 8:43:46-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码