形态学的高级形态,建立在腐蚀和膨胀这两个基本操作之上
图像开运算是图像依次经过腐蚀、膨胀处理后的过程。
开运算主要使用的函数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);
图像闭运算是图像依次经过膨胀、腐蚀处理后的过程。
图像闭运算主要使用的函数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);
图像梯度运算是膨胀图像减去腐蚀图像的结果,得到图像的轮廓
图像梯度运算主要使用的函数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);
图像顶帽运算是 原始图像 减去 图像开运算的结果,得到图像的噪声。
# 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);
图像黑帽运算是图像闭运算操作减去原始图像的结果,得到图像内部的小孔,或者前景色中的小黑点。
# 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);