opencv-python 形态学之开闭运算、形态学梯度、图像顶帽和黑帽运算

opencv-python 形态学之开闭运算、形态学梯度、图像顶帽和黑帽运算

形态学的高级形态,建立在腐蚀和膨胀这两个基本操作之上

一. 图像开运算

图像开运算是图像依次经过腐蚀、膨胀处理后的过程。

开运算主要使用的函数morphologyEx,它是形态学扩展的一组函数,其参数cv2.MORPH_OPEN对应开运算。其原型如下: dst
= cv2.morphologyEx(src, cv2.MORPH_OPEN, kernel) dst表示处理的结果 src表示原图像 cv2.MORPH_OPEN表示开运算, Kernel表示卷积核。可以采用函数 np.ones((5,5), np.uint8)
构建。或cv2.getStructuringElement(cv2.MORPH_RECT,(5,5))

# coding:utf-8
import cv2
import numpy as np
image= cv2.imread('./data/wb2.png') 
window_name="MORPH_OPEN"
orgname="原图:".encode("gbk").decode(errors="ignore")
def callBack_func(r):
	kernel= cv2.getStructuringElement(cv2.MORPH_RECT,(2*r+1,2*r+1))
	dst=cv2.morphologyEx(image, cv2.MORPH_OPEN, kernel);  

	cv2.imshow(window_name,dst); 
cv2.imshow(orgname , image)
cv2.namedWindow(window_name);
cv2.createTrackbar('kernel', window_name, 1,20, callBack_func);
cv2.waitKey(0);

拖动TrackBar看开运算效果
opencv-python 形态学之开闭运算、形态学梯度、图像顶帽和黑帽运算_第1张图片

二. 图像闭运算

图像闭运算是图像依次经过膨胀、腐蚀处理后的过程。

图像闭运算主要使用的函数morphologyEx,其原型如下: dst = cv2.morphologyEx(src, cv2.MORPH_CLOSE, kernel)
dst表示处理的结果
src表示原图像,
cv2.MORPH_CLOSE表示闭运算,kernel表示卷积核。可以采用函数 np.ones((5,5), np.uint8) 或getStructuringElement构建。

# coding:utf-8
import cv2
import numpy as np
image= cv2.imread('./data/wb2.png') 
window_name="MORPH_CLOSE"
orgname="原图:".encode("gbk").decode(errors="ignore")
def callBack_func(r):
    kernel= cv2.getStructuringElement(cv2.MORPH_RECT,(2*r+1,2*r+1))
	dst=cv2.morphologyEx(image, cv2.MORPH_CLOSE, kernel); 
	cv2.imshow(window_name,dst); 
cv2.imshow(orgname , image)
cv2.namedWindow(window_name);
cv2.createTrackbar('kernel', window_name, 1,20, callBack_func);
cv2.waitKey(0);

opencv-python 形态学之开闭运算、形态学梯度、图像顶帽和黑帽运算_第2张图片

三. 形态学梯度

图像梯度运算是膨胀图像减去腐蚀图像的结果,得到图像的轮廓

图像梯度运算主要使用的函数morphologyEx,参数为cv2.MORPH_GRADIENT。其原型如下:
dst = cv2.morphologyEx(src, cv2.MORPH_GRADIENT, kernel)

# coding:utf-8

import cv2
import numpy as np
image= cv2.imread('./data/wb2.png') 
window_name="MORPH_GRADIENT"
orgname="原图:".encode("gbk").decode(errors="ignore")
def callBack_func(r):
	kernel= cv2.getStructuringElement(cv2.MORPH_RECT,(2*r+1,2*r+1))
	dst=cv2.morphologyEx(image, cv2.MORPH_GRADIENT, kernel);
	cv2.imshow(window_name,dst); 
cv2.imshow(orgname , image)
cv2.namedWindow(window_name);
cv2.createTrackbar('kernel', window_name, 1,20, callBack_func);
cv2.waitKey(0);

opencv-python 形态学之开闭运算、形态学梯度、图像顶帽和黑帽运算_第3张图片

四. 图像顶帽

图像顶帽运算是 原始图像 减去 图像开运算的结果,得到图像的噪声。

# coding:utf-8

import cv2
import numpy as np
image= cv2.imread('./data/wb2.png') 
window_name="MORPH_TOPHAT"
orgname="原图:".encode("gbk").decode(errors="ignore")
def callBack_func(r):
	kernel= cv2.getStructuringElement(cv2.MORPH_RECT,(2*r+1,2*r+1))
	dst=cv2.morphologyEx(image, cv2.MORPH_OPEN, kernel);  
	cv2.imshow("open",dst); 
	dst=cv2.morphologyEx(image, cv2.MORPH_TOPHAT, kernel);  
	cv2.imshow(window_name,dst); 
cv2.imshow(orgname , image)
cv2.namedWindow(window_name);
cv2.createTrackbar('kernel', window_name, 1,20, callBack_func);
cv2.waitKey(0);

opencv-python 形态学之开闭运算、形态学梯度、图像顶帽和黑帽运算_第4张图片

四. 黑帽运算

图像黑帽运算是图像闭运算操作减去原始图像的结果,得到图像内部的小孔,或者前景色中的小黑点。

opencv-python 形态学之开闭运算、形态学梯度、图像顶帽和黑帽运算_第5张图片

# coding:utf-8
import cv2
import numpy as np
image= cv2.imread('./data/wb2.png') 
window_name="MORPH_BLACKHAT"
orgname="原图:".encode("gbk").decode(errors="ignore")

def callBack_func(r):
	kernel= cv2.getStructuringElement(cv2.MORPH_RECT,(2*r+1,2*r+1))
	dst=cv2.morphologyEx(image, cv2.MORPH_CLOSE, kernel); 
	cv2.imshow("close",dst);   
	dst=cv2.morphologyEx(image, cv2.MORPH_BLACKHAT, kernel);  
	cv2.imshow(window_name,dst); 
cv2.imshow(orgname , image)
cv2.namedWindow(window_name);
cv2.createTrackbar('kernel', window_name, 1,20, callBack_func);
cv2.waitKey(0);

你可能感兴趣的:(opencv-python)