Python e OpenCV. Como detecto todos os círculos (preenchidos) / objetos redondos em uma imagem?
Estou tentando criar um programa que abra uma imagem, verifique se há círculos / formas redondas e retorne as coordenadas para que eu possa usar ocv.Circle
para desenhar círculos sobre o círculo detectad
Minha pergunta é: Como obtenho as coordenadas / raios dos círculos detectados em uma imagem usandocv.HoughCircles()
?
Usingist page, descobri como detectar os círculos (o que demorou muito tempo para descobrir, pois não entendo termos como limiar e a documentação do OpenCV para Python é realmente ruim, quase nenhuma). Infelizmente, nessa página, não foi mostrado como extrair as informações de cada círculo detectado doCvMat
criada. Como extraio essas informações / existe alguma outra maneira (por exemplo, comMemoryStorage()
)?
Este é o meu código até agora:
import cv, opencv
def main():
im = cv.LoadImageM("Proba.jpg")
gray = cv.CreateImage(cv.GetSize(im), 8, 1)
edges = cv.CreateImage(cv.GetSize(im), 8, 1)
cv.CvtColor(im, gray, cv.CV_BGR2GRAY)
cv.Canny(gray, edges, 50, 200, 3)
cv.Smooth(gray, gray, cv.CV_GAUSSIAN, 9, 9)
storage = cv.CreateMat(im.rows, 1, cv.CV_32FC3)
cv.HoughCircles(edges, storage, cv.CV_HOUGH_GRADIENT, 2, gray.height/4, 200, 100)
# Now, supposing it found circles, how do I extract the information?
print storage.r
if __name__ == '__main__':
main()
Além disso, qual o valor dos dois últimos parâmetros deHoughCircles
precisa ter para eu detectar círculos realmente pequenos (como 3 mm na tela)?
Obrigado a todos pelo seu tempo e esforço tentando me ajudar!
A imagem com a qual estou trabalhando é esta: