Notas de Estudio (15): una escuela que entiende la visión por ordenador (el primer trimestre) - Ejemplo de programa

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:

 

 

 

 

 

 

 

 

Publicado 65 artículos originales · ganado elogios 34 · vistas 260 000 +

Supongo que te gusta

Origin blog.csdn.net/huanggang982/article/details/104605572
Recomendado
Clasificación