Prueba de detección de círculos de Hough con Python

Tabla de contenido

1. Propósito

2. El principio de detección de jardines de Hough

3. Usa la prueba opencv


1. Propósito

 Registre el proceso de escritura de detección de círculos de Hough usando python

2. El principio de detección de jardines de Hough

¡levemente! No me culpes, esto implica principios matemáticos. Lo agregaré cuando tenga tiempo, lo usaremos primero. (Definitivamente no es que no entienda. Je, je, je)

3. Usa la prueba opencv

Primero use una imagen muy estándar para probar, una imagen que dibujé directamente en ptp:

import cv2 as cv
import numpy as np
 
#读取文件
origin = cv.imread('images/origin3.png', 1)
img = cv.imread('images/origin3.png', 0)

#霍夫圆检测
circles = cv.HoughCircles(img, cv.HOUGH_GRADIENT, 1, 100, param1=50, param2=30, minRadius=0, maxRadius=100)
 
circles = np.uint16(np.around(circles))
 
#将检测到的圆圈标上去
for i in circles[0, :]:  # 遍历矩阵每一行的数据
    cv.circle(origin, (i[0], i[1]), i[2], (0, 255, 0), 2)
    cv.circle(origin, (i[0], i[1]), 2, (0, 0, 255), 3)
 
#显示图像
cv.imshow("image", origin)
cv.waitKey(0)
cv.destroyAllWindows()

El reconocimiento funciona perfectamente:

Usando una imagen al azar:

Ajuste los parámetros de param1 y param2 y el radio:

import cv2 as cv
import numpy as np
 
#读取文件
origin = cv.imread('images/origin1.png', 1)
img = cv.imread('images/origin1.png', 0)

# cv.imshow("image", origin)
# cv.waitKey(0)

#霍夫圆检测
circles = cv.HoughCircles(img, cv.HOUGH_GRADIENT, 1, 13, param1=50, param2=18, minRadius=0, maxRadius=20)
 
circles = np.uint16(np.around(circles))
 
#将检测到的圆圈标上去
for i in circles[0, :]:  # 遍历矩阵每一行的数据
    cv.circle(origin, (i[0], i[1]), i[2], (0, 255, 0), 2)
    cv.circle(origin, (i[0], i[1]), 2, (0, 0, 255), 3)
 
#显示图像
cv.imshow("image", origin)
cv.waitKey(0)
cv.destroyAllWindows()

Se identifican dos puntos más y el radio de estos dos puntos es relativamente pequeño, por lo que es fácil de manejar. Dirígelo oh triste minRadio para el control

 círculos = cv.HoughCircles(img, cv.HOUGH_GRADIENT, 1, 13, param1=50, param2=18, minRadius=15, maxRadius=20)

El resultado final: (el efecto de detección sigue siendo muy bueno)

 Gracias por leer, si tiene alguna pregunta, puede comentar en los comentarios.

Supongo que te gusta

Origin blog.csdn.net/qq_39298227/article/details/126675097
Recomendado
Clasificación