本文主要是介绍opencv python 图像形态学,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
形态学操作(morphology operators)
图像形态学操作 – 基于形状的一系列图像处理操作的合集,
主要是基于集合论基础上的形态学数学。
形态学主要针对二值图像进行处理,特别是OCR等这些处理,
还有特征提取、区域分割等也可以通过形态学的方法进行。形态学有四个基本操作:腐蚀、膨胀、开、闭。
膨胀与腐蚀是图像处理中最常用的形态学操作手段。
1)膨胀(dilate)
跟卷积操作类似,假设有图像A和结构元素B,
结构元素B在A上面移动,其中B定义其中心为锚点,
以B覆盖下A的最大像素值(偏白)替换锚点的像素,
其中B作为结构体可以是任意形状。
(与卷积不同之处,可以是线、矩阵、圆、十字等形状)
最大值(偏白)替换就是向原图边缘膨胀,白色变多,黑色变小
(2)腐蚀(erode)
腐蚀跟膨胀操作的过程类似,唯一不同的是以最小值(偏黑)
替换锚点重叠下图像的像素值。
二值图像与灰度图像上的腐蚀操作:
最小值(偏黑)替换就是向背景做了腐蚀,黑色变大,白色变小。
import cv2
import numpy as np# 腐蚀 取最小值
def erossionDef(img):kernel = np.ones((5,5),np.uint8)erossion = cv2.erode(img,kernel,iterations=1)return erossion# 膨胀 取最大值
def dilate(img):kernel = np.ones((5, 5), np.uint8)img = cv2.dilate(img,kernel,iterations=1)return img# 开运算:先腐蚀 再膨胀
def morphOpen(img):kernel = np.ones((5, 5), np.uint8)img = cv2.morphologyEx(img,cv2.MORPH_OPEN,kernel)return img# 闭运算:先膨胀 再腐蚀
def morphClose(img):kernel = np.ones((5, 5), np.uint8)img = cv2.morphologyEx(img,cv2.MORPH_CLOSE,kernel)return img# 梯度 = 膨胀 - 腐蚀
def gradientImg(img):kernel = np.ones((3,3), np.uint8)img = cv2.morphologyEx(img,cv2.MORPH_GRADIENT,kernel)return img# 礼帽 = 原始输入 - 开运算结果
def topHat(img):kernel = np.ones((5, 5), np.uint8)img = cv2.morphologyEx(img,cv2.MORPH_TOPHAT,kernel)return imgdef blackHat(img):kernel = np.ones((5, 5), np.uint8)img = cv2.morphologyEx(img, cv2.MORPH_BLACKHAT, kernel)return imgimg = cv2.imread("img1.png")# img = erossionDef(img)
# img1 = dilate(img)
# img2 = erossionDef(img)
# img3 = gradientImg(img)
#
# img = np.hstack((img,img1,img2,img3))img = blackHat(img)cv2.imshow("img",img)
cv2.waitKey(0)
cv2.destroyAllWindows()
这篇关于opencv python 图像形态学的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!