本文主要是介绍Opencv中的形态字梯度,顶帽,黑帽(python实现),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
文章目录
- 1.了解腐蚀和膨胀
- 2.了解开运算和闭运算
- 3.形态字梯度
- (1)形态字梯度=原图-腐蚀
- (2)函数讲解
- (3)代码实战
- 4.顶帽
- (1)顶帽=原图-开运算
- (2)函数讲解
- 6.黑帽
- (1)黑帽=原图-闭运算
- (2)函数讲解
- 7.总结
1.了解腐蚀和膨胀
https://mydreamambitious.blog.csdn.net/article/details/125265431
2.了解开运算和闭运算
https://mydreamambitious.blog.csdn.net/article/details/125298061
3.形态字梯度
(1)形态字梯度=原图-腐蚀
(2)函数讲解
morphologyEx(src, op, kernel, dst=None, anchor=None, iterations=None, borderType=None, borderValue=None):
Src:输入的原始图像
;
Op:进行操作(开运算,闭运算,顶帽,黑帽,形态字梯度)
;
Kernel:卷积核的大小
;
Dst:输出的图像
;
Anchor:默认值为(-1,-1),卷积的中心
。
Iterations:迭代的次数
。
borderType:用于推断图像外部像素的某种边界模式。注意它有默认值 BORDER_DEFAULT
。
borderValue:边界值(如果是常量边界)。默认morphologyDefaultBorderValue具有特殊含义。对于侵蚀,它被转换为+\inf;对于膨胀,它被转换为-\inf,这意味着只有在图像内部的像素上才能有效地计算最小值(最大值)
。
(3)代码实战
import os
import cv2
import numpy as npdef MorphologyGradient(img_path='images/Exen.png'):#读取图片img_src=cv2.imread(img_path)#缩放图片的大小img=cv2.resize(src=img_src,dsize=(500,500))#获取卷积核kernel=cv2.getStructuringElement(shape=cv2.MORPH_RECT,ksize=(5,5))#进行顶帽运算img=cv2.morphologyEx(src=img,op=cv2.MORPH_GRADIENT,kernel=kernel,iterations=1)#显示图片cv2.imshow('img_src',img_src)cv2.imshow('img',img)#等待鼠标和键盘值cv2.waitKey(0)cv2.destroyAllWindows()def MorphologyGradient_2(img_path='images/Exen.png'):# 读取图片img_src = cv2.imread(img_path)# 缩放图片的大小img = cv2.resize(src=img_src, dsize=(500, 500))# 获取卷积核kernel = cv2.getStructuringElement(shape=cv2.MORPH_RECT, ksize=(5, 5))# 进行顶帽运算img_erode=cv2.erode(src=img,kernel=kernel,iterations=1)#将原图和img_open缩放到同样大小img_src=cv2.resize(src=img_src,dsize=(500,500))img=img_src-img_erode# 显示图片cv2.imshow('img_src', img_src)cv2.imshow('img', img)# 等待鼠标和键盘值cv2.waitKey(0)cv2.destroyAllWindows()if __name__ == '__main__':print('pycharm')# MorphologyGradient()MorphologyGradient_2()
直接使用函数:
采用:原图-腐蚀
4.顶帽
(1)顶帽=原图-开运算
得到图形外的小图形
(2)函数讲解
morphologyEx(src, op, kernel, dst=None, anchor=None, iterations=None, borderType=None, borderValue=None):
Src:输入的原始图像
;
Op:进行操作(开运算,闭运算,顶帽,黑帽)
;
Kernel:卷积核的大小
;
Dst:输出的图像
;
Anchor:默认值为(-1,-1),卷积的中心
。
Iterations:迭代的次数
。
borderType:用于推断图像外部像素的某种边界模式。注意它有默认值 BORDER_DEFAULT
。
borderValue:边界值(如果是常量边界)。默认morphologyDefaultBorderValue具有特殊含义。对于侵蚀,它被转换为+\inf;对于膨胀,它被转换为-\inf,这意味着只有在图像内部的像素上才能有效地计算最小值(最大值)
。
代码实战:
import os
import cv2
import numpy as npdef MorphologyTopPath(img_path='images/Exen_white.png'):#读取图片img_src=cv2.imread(img_path)#缩放图片的大小img=cv2.resize(src=img_src,dsize=(500,500))#获取卷积核kernel=cv2.getStructuringElement(shape=cv2.MORPH_RECT,ksize=(5,5))#进行顶帽运算img=cv2.morphologyEx(src=img,op=cv2.MORPH_TOPHAT,kernel=kernel,iterations=1)#显示图片cv2.imshow('img_src',img_src)cv2.imshow('img',img)#等待鼠标和键盘值cv2.waitKey(0)cv2.destroyAllWindows()def MorphologyTopPath_2(img_path='images/Exen_white.png'):# 读取图片img_src = cv2.imread(img_path)# 缩放图片的大小img = cv2.resize(src=img_src, dsize=(500, 500))# 获取卷积核kernel = cv2.getStructuringElement(shape=cv2.MORPH_RECT, ksize=(5, 5))# 进行顶帽运算img_open = cv2.morphologyEx(src=img, op=cv2.MORPH_OPEN, kernel=kernel, iterations=1)#将原图和img_open缩放到同样大小img_src=cv2.resize(src=img_src,dsize=(500,500))img=img_src-img_open# 显示图片cv2.imshow('img_src', img_src)cv2.imshow('img', img)# 等待鼠标和键盘值cv2.waitKey(0)cv2.destroyAllWindows()if __name__ == '__main__':print('pycharm')# MorphologyTopPath()MorphologyTopPath_2()
直接使用函数:
采用:原图-开运算;
6.黑帽
(1)黑帽=原图-闭运算
得到大图形内的小图形;
(2)函数讲解
morphologyEx(src, op, kernel, dst=None, anchor=None, iterations=None, borderType=None, borderValue=None):
Src:输入的原始图像
;
Op:进行操作(开运算,闭运算,顶帽,黑帽)
;
Kernel:卷积核的大小
;
Dst:输出的图像
;
Anchor:默认值为(-1,-1),卷积的中心
。
Iterations:迭代的次数
。
borderType:用于推断图像外部像素的某种边界模式。注意它有默认值 BORDER_DEFAULT
。
borderValue:边界值(如果是常量边界)。默认morphologyDefaultBorderValue具有特殊含义。对于侵蚀,它被转换为+\inf;对于膨胀,它被转换为-\inf,这意味着只有在图像内部的像素上才能有效地计算最小值(最大值)
。
代码实战:
import os
import cv2
import numpy as npdef MorphologyBlackHAT(img_path='images/Exen_black.png'):#读取图片img_src=cv2.imread(img_path)#缩放图片的大小img=cv2.resize(src=img_src,dsize=(500,500))#获取卷积核kernel=cv2.getStructuringElement(shape=cv2.MORPH_RECT,ksize=(5,5))#进行顶帽运算img=cv2.morphologyEx(src=img,op=cv2.MORPH_BLACKHAT,kernel=kernel,iterations=1)#显示图片cv2.imshow('img_src',img_src)cv2.imshow('img',img)#等待鼠标和键盘值cv2.waitKey(0)cv2.destroyAllWindows()def MorphologyBlackHAT_2(img_path='images/Exen_black.png'):# 读取图片img_src = cv2.imread(img_path)# 缩放图片的大小img = cv2.resize(src=img_src, dsize=(500, 500))# 获取卷积核kernel = cv2.getStructuringElement(shape=cv2.MORPH_RECT, ksize=(7,7))# 进行顶帽运算img_close = cv2.morphologyEx(src=img, op=cv2.MORPH_CLOSE, kernel=kernel, iterations=1)#将原图和img_open缩放到同样大小img_src=cv2.resize(src=img_src,dsize=(500,500))img=img_src-img_close# 显示图片cv2.imshow('img_src', img_src)cv2.imshow('img', img)# 等待鼠标和键盘值cv2.waitKey(0)cv2.destroyAllWindows()if __name__ == '__main__':print('pycharm')# MorphologyBlackHAT()MorphologyBlackHAT_2()
直接使用函数:
7.总结
(1)开运算:腐蚀+膨胀;去除大图像外的小图像;
(2)闭运算:膨胀+腐蚀;去除大图像内的小图像;
(3)梯度:原图-腐蚀;求图形的边缘;
(4)顶帽:原图-开运算;得到大图形外的小图形;
(5)黑帽:原图-闭运算;得到图形内的小图形;
这篇关于Opencv中的形态字梯度,顶帽,黑帽(python实现)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!