Aprender de inmediato: https://edu.csdn.net/course/play/26281/327078?utm_source=blogtoedu
Esta sección debe cambiar a la siguiente sección un poco, Introducción Esta sección se refiere a la transformación morfológica se hablará en la siguiente sección.
borde OpenCV se puede detectar usando un operador básico de detección de bordes puede ser usado para lograr la transformación morfológica:
1. El operador de detección de borde:
2. filtrado morfológico: la erosión, dilatación, apertura, funcionamiento, gradiente, sombrero de copa, negro tapa (tapa inferior) de cierre, golpear-miss transforman.
import cv2 as cv
import numpy as np
def gauss_noise(image, mean=0, var=0.001):
image=np.array(image/255, dtype=float)
noise=np.random.normal(mean, var ** 0.5, image.shape)
out=image+noise
if out.min() < 0:
low_clip = -1.
else:
low_clip = 0.
out=np.clip(out, low_clip, 1.0)
out=np.uint8(out*255)
return out
def edge_detection():
filename= "d:/lena.jpg"
img=cv.imread(filename, 0)
#img=gauss_noise(img)
#sobel边缘检测算子
sobel_y=cv.Sobel(img, cv.CV_16S, 0, 1, ksize=3)
sobel_x=cv.Sobel(img, cv.CV_16S, 1, 0, ksize=3)
#拉普拉斯边缘检测算子
laplacian=cv.Laplacian(img, cv.CV_16S)
#canny边缘检测,最小阈值50,最大阈值120
canny=cv.Canny(img, 50, 120)
sobel_x_show=cv.convertScaleAbs(sobel_x)
sobel_y_show=cv.convertScaleAbs(sobel_y)
laplacian_show=cv.convertScaleAbs(laplacian)
cv.imshow("image", img)
cv.imshow("soble_x", sobel_x_show)
cv.imshow("soble_y", sobel_y_show)
cv.imshow("laplacian", laplacian_show)
cv.imshow("canny", canny)
cv.waitKey()
cv.destroyAllWindows()
def morphology_convert():
filename= "d:/lena.jpg"
img=cv.imread(filename, 0)
nimg=gauss_noise(img)
kernel=cv.getStructuringElement(cv.MORPH_CROSS, (3,3))
#腐蚀
eroded=cv.erode(img, kernel)
#膨胀
dilated=cv.dilate(img, kernel)
#先开后闭去噪
opened=cv.morphologyEx(nimg, cv.MORPH_OPEN, kernel)
closed=cv.morphologyEx(opened, cv.MORPH_CLOSE, kernel)
#梯度变换
gradient=cv.morphologyEx(img, cv.MORPH_GRADIENT, kernel)
#顶帽变换
tophat=cv.morphologyEx(img, cv.MORPH_TOPHAT, kernel)
#底帽变换
bottomhat=cv.morphologyEx(img, cv.MORPH_BLACKHAT, kernel)
#增强
enhance=img + tophat - bottomhat
#击中击不中变换
kernel_hmt=np.array(([0,1,0],[1,-1,1],[0,1,0]), dtype='int')
hmt=cv.morphologyEx(img, cv.MORPH_HITMISS, kernel_hmt)
cv.imshow("image", img)
cv.imshow("noised image", nimg)
cv.imshow("eroded image", eroded)
cv.imshow("dilated image", dilated)
cv.imshow("opened", opened)
cv.imshow("closed", closed)
cv.imshow("gradient image", gradient)
cv.imshow("tophat image", tophat)
cv.imshow("bottomhat image", bottomhat)
cv.imshow("enhance image", enhance)
cv.imshow("hit or miss image", hmt)
cv.waitKey()
cv.destroyAllWindows()
if __name__ == '__main__':
morphology_convert()
El efecto es como: