OpenCV笔记(2)(高斯平滑、腐蚀和膨胀、开闭运算、礼帽和黑帽、Sobel及其他算子)
一、高斯平滑(模糊)
def gaussian_blur(image):
# 设置ksize来确定模糊效果
img = cv.GaussianBlur(image, (5, 5), 0)
cv.imshow('img', img) # 不通过ksize来设置高斯核大小,通过设置高斯分布公式中的sigma
img2 = cv.GaussianBlur(image, (0, 0), 1)
cv.imshow('img2', img2)

在高斯平滑中,高斯核中所有数字加起来应该为1,这样才能保证图片只发生平滑效果,而不影响亮度等其他效果。
例如3x3的高斯核如下所示:

二、边缘保留滤波(EPF)
高斯双边模糊(美颜):
def bi_blur(image):
img = cv.bilateralFilter(image, 0, 100, 5)
cv.imshow('img', img)

从效果可以看出,边缘保留的还不错,而非边缘进行了模糊。双边模糊的效率比较低,特别是sigmaSpace比较大的时候。
cv.bilateralFilter()函数的参数:
src:原图像
d:过滤过程中每个像素领域的直径范围,若非正数,则从sigmaSpace计算
sigmaColor:值越大,表示像素领域内有多宽的颜色(颜色范围)会被混在一起
sigmaSpace:如果值较大,表示颜色相近的较远像素(空间范围)将互相影响,从而使更大区域足够相似的颜色获取相同的颜色。
三、腐蚀和膨胀
腐蚀操作:
# 腐蚀操作,用于去除一些细小的白色颗粒或线条
def erode_img(image):
kernel = np.ones((5,5),np.uint8)
# 当核尺寸越大时,每次腐蚀的程度越大,iter是操作中叠加几次腐蚀
img = cv.erode(image,kernel,iterations = 1)
cv.imshow('img',img)

膨胀操作:
膨胀可以说是腐蚀的反操作:
# 膨胀操作,用于去除一些细小的黑色漏洞
def dilate_img(image):
kernel = np.ones((5, 5), np.uint8)
img = cv.dilate(image, kernel, iterations=1)
cv.imshow('img', img)

结合腐蚀和膨胀:
结合腐蚀和膨胀,可以消除一些细小的不需要的部分,然后再复原。
def combo_proc(image):
kernel = np.ones((5, 5), np.uint8)
img = cv.dilate(image, kernel, iterations=1)
img2 = cv.erode(img, kernel, iterations=1)
cv.imshow('img2', img2)

四、开运算和闭运算
# 开操作:先腐蚀再膨胀
def open_proc(image):
kernel = np.ones((5, 5), np.uint8)
opening = cv.morphologyEx(image, cv.MORPH_OPEN, kernel)
cv.imshow('opening', opening) # 闭操作:先膨胀再腐蚀
def close_proc(image):
kernel = np.ones((5, 5), np.uint8)
closing = cv.morphologyEx(image, cv.MORPH_CLOSE, kernel)
cv.imshow('closing', closing)

结合开闭运算:
# 先做开操作,再做闭操作
def open_close_proc(image):
kernel = np.ones((5, 5), np.uint8)
opening = cv.morphologyEx(image, cv.MORPH_OPEN, kernel)
closing = cv.morphologyEx(opening, cv.MORPH_CLOSE, kernel)
cv.imshow('closing', closing)

梯度运算:
# 梯度操作:膨胀 - 腐蚀
def gradient_proc(image):
kernel = np.ones((3, 3), np.uint8)
gradient = cv.morphologyEx(image, cv.MORPH_GRADIENT, kernel)
cv.imshow('gradient', gradient)

五、礼帽和黑帽
礼帽是通过原图片减去开操作后的图像,得到其中的多于细小部分(字边上的白色细线)。
黑帽是通过闭操作后的图像减去原图像,得到其中的细小泄漏部分(字中间的黑色细线)。
礼帽:tophat
# tophat 礼帽
def tophat_img(image):
kernel = np.ones((3, 3), np.uint8)
img = cv.morphologyEx(image, cv.MORPH_TOPHAT, kernel)
cv.imshow('img', img)

黑帽:blackhat
# blackhat 黑帽
def blackhat_img(image):
kernel = np.ones((3, 3), np.uint8)
img = cv.morphologyEx(image, cv.MORPH_BLACKHAT, kernel)
cv.imshow('img', img)

六、Sobel算子
def sobel_proc(image):
# 这里的cv.CV_64F用来保存所有的梯度(不管正负),1,0是dx,dy表示计算横向梯度
sobelx = cv.Sobel(image, cv.CV_64F, 1, 0, ksize=3)
# 将所有梯度取绝对值
sobelx = cv.convertScaleAbs(sobelx)
cv.imshow('sobelx', sobelx) # 计算y方向的梯度
sobely = cv.Sobel(image, cv.CV_64F, 0, 1, ksize=3)
# 将所有梯度取绝对值
sobely = cv.convertScaleAbs(sobely)
cv.imshow('sobely', sobely)

当计算X,Y方向的梯度时,Sobel算子分别为:

X方向是右边像素减去左边像素,Y方向是上面像素减去下面的像素。
将XY方向的梯度合并起来:
def sobel_proc(image):
# 这里的cv.CV_64F用来保存所有的梯度(不管正负),1,0是dx,dy表示计算横向梯度
sobelx = cv.Sobel(image, cv.CV_64F, 1, 0, ksize=3)
# 将所有梯度取绝对值
sobelx = cv.convertScaleAbs(sobelx)
# cv.imshow('sobelx', sobelx) # 计算y方向的梯度
sobely = cv.Sobel(image, cv.CV_64F, 0, 1, ksize=3)
# 将所有梯度取绝对值
sobely = cv.convertScaleAbs(sobely)
# cv.imshow('sobely', sobely) # 将x和y方向的梯度合并起来,类似于sobelx+sobely
sobelxy = cv.addWeighted(sobelx, 1, sobely, 1, 0)
cv.imshow('sobelxy', sobelxy) # 不建议使用这种方式,有问题
sobelxy2 = cv.Sobel(image, -1, 1, 1, ksize=3)
cv.imshow('sobelxy2', sobelxy2)

建议使用addWeight()的方式进行合并,而不建议在一个Sobel计算中同时计算xy方向的梯度。
应用到图片上:
彩色图:

灰度图:

七、其他算子介绍
Scharr算子:(读/ʃɑr/)

scharr = cv.Scharr(image,cv.CV_64F, 1, 0)
scharr = cv.convertScaleAbs(scharr)
Scharr算子和Sobel算子类似,只是数值比Sobel大很多,这就导致Scharr算子灵敏度更高,噪声影响较大。如下图:

Laplacian算子:
拉普拉斯算子是图像的离散二阶导数,用于发现边缘突变,但对于噪声来说比较灵敏,一般配合其他技术一起使用。


laplacian = cv.Laplacian(image,cv.CV_64F)
laplacian = cv.convertScaleAbs(laplacian)
Laplacian算是和前面的两种算子不同,前面的两种算子都属于一阶导数,而Laplacian算子是用于计算二阶导数的。体现的是边缘的突变度,即梯度的变化度。效果如图:

OpenCV笔记(2)(高斯平滑、腐蚀和膨胀、开闭运算、礼帽和黑帽、Sobel及其他算子)的更多相关文章
- OpenCV3编程入门笔记(4)腐蚀、膨胀、开闭运算、漫水填充、金字塔、阈值化、霍夫变换
腐蚀erode.膨胀dilate 腐蚀和膨胀是针对图像中的白色部分(高亮部分)而言的,不是黑色的.除了输入输出图像外,还需传入模板算子element,opencv中有三种可以选择:矩形MORPH_RE ...
- OpenCV计算机视觉学习(5)——形态学处理(腐蚀膨胀,开闭运算,礼帽黑帽,边缘检测)
如果需要处理的原图及代码,请移步小编的GitHub地址 传送门:请点击我 如果点击有误:https://github.com/LeBron-Jian/ComputerVisionPractice 形态 ...
- OpenCV探索之路(四):膨胀、腐蚀、开闭运算
腐蚀和膨胀是最基本的形态学运算. 腐蚀和膨胀是针对白色部分(高亮部分)而言的. 膨胀就是对图像高亮部分进行"领域扩张",效果图拥有比原图更大的高亮区域:腐蚀是原图中的高亮区域被蚕食 ...
- OpenCV学习(10) 图像的腐蚀与膨胀(1)
建议大家看看网络视频教程:http://www.opencvchina.com/thread-886-1-1.html 腐蚀与膨胀都是针对灰度图的形态学操作,比如下面的一副16*16的灰度图. ...
- opencv学习之路(15)、形态学其他操作(开、闭、顶帽、黑帽、形态学梯度)
一.形态学其他操作(用的不多,如果忘了也可以通过膨胀腐蚀得到相同效果) 1.开运算 2.闭运算 3.形态学梯度 4.顶帽 5.黑帽 #include "opencv2/opencv.hpp& ...
- OpenCV学习(11) 图像的腐蚀与膨胀(2)
先对一副灰度图像进行腐蚀操作,然后在腐蚀后的图像上再进行膨胀操作,我们定义这个操作为开操作. 先对一副图像进行膨胀操作,然后在膨胀后的图像上再进行腐蚀操作,我们定义这个操作为闭操作. 开操 ...
- OpenCV学习(12) 图像的腐蚀与膨胀(3)
通过使用不同的结构元素来进行膨胀腐蚀操作,可以检测图像中的角点,下面就一步一步看这个算法如果实现角点检测. 原图像: 首先我们创建四个结构元素 先用十字结构元素对原图像进行膨胀操作,得到下面的图像 再 ...
- OpenCV学习 7:图像形态学:腐蚀、膨胀
原创文章,欢迎转载,转载请注明出处 首先什么是图像形态学?额,这个抄下百度到的答案.基本思想: 用具有一定形态的结构元素去度量和提取图像中的对应形状已达到对图像分析和识别的目的,形态学图像处理表 ...
- 【python-opencv】17-形态学操作-腐蚀与膨胀
形态学操作其实就是改变物体的形状,比如腐蚀就是"变瘦",膨胀就是"变胖",看下图就明白了: 形态学操作一般作用于二值化图(也可直接作用于原图),来连接相邻的元素 ...
随机推荐
- VisualBasic文件与目录管理FileSystem 类
注解 下表列出了涉及 My.Computer.FileSystem 对象的任务示例. 功能 查看 从文本文件读取 如何:读取文本文件 从带分隔符的文本文件中读取 如何:读取逗号分隔的文本文件 从固定宽 ...
- (转)C++ bitset用法
今天做题发现要用到bitset,找到一篇介绍的巨好的文章. 转载自:https://www.cnblogs.com/magisk/p/8809922.html C++的 bitset 在 bitset ...
- Linux系统下部署Tomcat服务器
详细步骤如下: 1.下载xshell5和xftp5并安装,登录连接服务器,新建会话窗口: 2.安装配置JDK1.8,具体操作方法如下: (1)下载JDK地址:http://www.oracle.com ...
- Go语言中 Print,Println 和 Printf 的区别(八)
Print 和 Println 这两个打印方式类似,只在格式上有区别 1. Println 打印的每一项之间都会有空行,Print 没有,例如: fmt.Println("go", ...
- 关于maven自动部署tomcat9 步骤
maven 自动部署tomcat9 (远程方法) 1.首先要去配置用户,在tomcat的conf中有tomcat_users.xml,在其中有tomcat-user的配置 配置:<tommcat ...
- nigx下配置tp5.1路由
打开宝塔面板,找到你要配置路由的网站并找到配置文件(如图1) (图1) 2.在配置文件里添加一下代码 set $root = /www/wwwroot/www.blogs.test/public; # ...
- 如何用纯 CSS 创作一个精彩的彩虹 loading 特效
效果预览 在线演示 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/vjvoow 可交互视频教 ...
- monggoDB添加到windows服务
----------------mongoDB安装------------------------------- 1.下载mongoDB安装包安装完毕后,配置环境变量 D:\Program Files ...
- windows10升级更新1709版本 在桌面和文件夹中点击右键刷新,会引起卡顿反应慢
win10,升级更新,1709,右键,卡机,刷新,反应慢,桌面,文件夹 windows自动升级到1709版本后出现的问题,而之前是没有这种问题的. 最终解决办法:(需要设置注册表) 运行:快捷键Win ...
- 05 Python网络爬虫的数据解析方式
一.爬虫数据解析的流程 1.指定url 2.基于requests模块发起请求 3.获取响应中的数据 4.数据解析 5.进行持久化存储 二.解析方法 (1)正则解析 (2)bs4解析 (3)xpath解 ...