Morfología de la imagen OpenCv

Tabla de contenido

1. Morfología

 2. Binarización global de imágenes

 3. Binarización de umbral adaptativo

4. Operaciones de corrosión

5. Obtener el núcleo de convolución morfológico

6. Operación de ampliación

7. Operación abierta

8. Operación cerrada


1. Morfología

definición:

  • Se refiere a una serie de técnicas de procesamiento de imágenes que procesan características de forma de la imagen.
  • La idea básica de la morfología es utilizar un elemento estructural especial (esencialmente un núcleo de convolución) para medir o extraer la forma correspondiente o la característica cero en la imagen de entrada para un mayor análisis de la imagen y reconocimiento del objetivo.
  • Estos métodos de procesamiento básicamente procesan imágenes binarias, es decir, imágenes en blanco y negro.
  • El núcleo de convolución determina el efecto del procesamiento de imágenes.

 2. Binarización global de imágenes

Binarización: convierte cada píxel de la imagen en dos valores, como 0,255

Función de referencia:

 El código del caso es el siguiente:

import cv2
import numpy as  np


# 导入图片
img = cv2.imread('6.jpg')

# 二值化是对灰度图像操作
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

# 注意,threshold会返回两个值(一个是阈值,一个是二值化处理后的图片)
thresh,dst = cv2.threshold(gray,127,255,cv2.THRESH_BINARY)

# 展示
cv2.imshow('dog',np.hstack((gray,dst)))

# 释放资源
cv2.waitKey(0)
cv2.destroyAllWindows()

 3. Binarización de umbral adaptativo

premisa:

En la parte anterior, usamos el valor de olor global y toda la imagen usó el mismo número que el valor de olor. Este método no es adecuado para todas las situaciones, especialmente cuando diferentes partes de la misma imagen tienen diferente brillo. En este caso necesitamos utilizar valores auditivos adaptativos. El valor de ruido en este momento se calcula en función de cada área pequeña de la imagen y su valor de ruido correspondiente. Por lo tanto, diferentes áreas de la misma imagen utilizan diferentes valores de olor, de modo que podemos obtener mejores resultados cuando el brillo es diferente.

El código del caso es el siguiente:

import cv2
import numpy as np

img = cv2.imread('6.jpg')


cv2.namedWindow('img',cv2.WINDOW_NORMAL)
cv2.resizeWindow('img',1920,1080)

# 二值化操作是对灰度图像操作,把图像转为灰度图像
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

# 自适应阈值二值化只返回一个值,即二值化后的结果
dst = cv2.adaptiveThreshold(gray,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,cv2.THRESH_BINARY_INV,3,0)

# 展示
cv2.imshow('img',np.hstack((gray,dst)))

cv2.waitKey(0)
cv2.destroyAllWindows()

4. Operaciones de corrosión

La operación de corrosión también utiliza un núcleo de convolución para escanear la imagen, pero la suma de convolución de la operación de corrosión es generalmente 1. Si todos los píxeles del núcleo de convolución son blancos, entonces los puntos de anclaje también son blancos.

API de operación de corrosión:

 El código del caso es el siguiente:

import cv2
import numpy as np

# 导入图片
img = cv2.imread('6.jpg')

# 定义核
kernel = np.ones((3,3),np.uint8)
dst = cv2.erode(img,kernel,iterations=2)

cv2.imshow('img',np.hstack((img,dst)))

cv2.waitKey(0)
cv2.destroyWindow()

5. Obtener el núcleo de convolución morfológico

OpenCv proporciona una API para obtener núcleos de convolución, lo que no requiere que creemos núcleos de convolución manualmente.

El código del caso es el siguiente:

import cv2
import numpy as np


img = cv2.imread('6.jpg')

kernel = cv2.getStructuringElement(cv2.MORPH_RECT,(5,5))

# 腐蚀
dst = cv2.erode(img,kernel,iterations=2)

6. Operación de ampliación

La dilatación es la operación opuesta a la erosión. El principio básico es que siempre que el punto de anclaje del núcleo de convolución sea un valor distinto de cero, ya sea que el valor circundante sea 0 o distinto de 0, se convertirá en un valor distinto de cero.

El código del caso es el siguiente:

import cv2
import numpy as np

# 导入图片
img = cv2.imread('6.jpg')

# 动态获取卷积核
kernel = cv2.getStructuringElement(cv2.MORPH_RECT,(5,5))

# 膨胀操作
dst = cv2.dilate(img,kernel,iterations=1)

# 展示图片
cv2.imshow('img',np.hstack((img,dst)))

# 释放资源
cv2.waitKey(0)
cv2.destroyAllWindows()

7. Operación abierta

Operación abierta = corrosión + expansión

 El código del caso es el siguiente:

import cv2
import numpy as np

# 开运算=腐蚀+膨胀
# 开运算提供了另一种去除噪声的思路
img = cv2.imread('6.jpg')

kernel = cv2.cv2.getStructuringElement(cv2.MORPH_RECT,(5,5))

# # 先腐蚀
# dst = cv2.erode(img,kernel,iterations=2)
#
# # 膨胀
# dst = cv2.dilate(dst,kernel,iterations=2)

# 直接调用OpenCv提供的开运算API
dst = cv2.morphologyEx(img,cv2.MORPH_OPEN,kernel,iterations=2)

# 展示图片
cv2.imshow('img',np.hstack((img,dst)))

# 释放资源
cv2.waitKey(0)
cv2.destroyAllWindows()

Los resultados de ejecución son los siguientes:

8. Operación cerrada

Operación cerrada = expansión + corrosión

El código del caso es el siguiente:

import cv2
import numpy as np

# 导入图片
img = cv2.imread('6.jpg')

# 卷积核
kernel = cv2.getStructuringElement(cv2.MORPH_RECT,(5,5))

# 闭运算
dst = cv2.morphologyEx(img,cv2.MORPH_CLOSE,kernel,iterations=2)

# 展示图片
cv2.imshow('img',np.hstack((img,dst)))

# 释放资源
cv2.waitKey(0)
cv2.destroyAllWindows()

Supongo que te gusta

Origin blog.csdn.net/weixin_64443786/article/details/131785989
Recomendado
Clasificación