Ошибка OpenCV Python HoughCircles - PullRequest
3 голосов
/ 29 мая 2010

Я работаю над программой, которая обнаруживает круглые формы на изображениях. Я решил, что Hough Transform будет лучшим, и нашел его в библиотеке OpenCV. Проблема в том, что когда я пытаюсь использовать его, я получаю сообщение об ошибке, которое я не знаю, как исправить. OpenCV для Python реализован не полностью? Нужно ли исправить библиотеку, чтобы программа работала?

Вот код:

import cv

#cv.NamedWindow("camera", 1)
capture = cv.CaptureFromCAM(0)

while True:
    img = cv.QueryFrame(capture)
    gray = cv.CreateImage(cv.GetSize(img), 8, 1)
    edges = cv.CreateImage(cv.GetSize(img), 8, 1)

    cv.CvtColor(img, gray, cv.CV_BGR2GRAY)
    cv.Canny(gray, edges, 50, 200, 3)
    cv.Smooth(gray, gray, cv.CV_GAUSSIAN, 9, 9)

    storage = cv.CreateMat(1, 2, cv.CV_32FC3)

    #This is the line that throws the error
    cv.HoughCircles(edges, storage, cv.CV_HOUGH_GRADIENT, 2, gray.height/4, 200, 100)

    #cv.ShowImage("camera", img)
    if cv.WaitKey(10) == 27:
         break

И вот ошибка, которую я получаю:

Ошибка OpenCV: пустой указатель () в неизвестной функции, файл .. \ .. \ .. \ .. \ ocv \ openc \ src \ cxcore \ cxdatastructs.cpp, строка 408 Traceback (последний вызов был последним): Файл "ellipse-detect-webcam.py", строка 20, в cv.HoughCircles (ребра, хранилище, cv.CV_HOUGH_GRADIENT, 2, gray.height / 4, 200, 100) cv.error

Заранее спасибо за помощь.

Ответы [ 3 ]

1 голос
/ 30 марта 2011

Как бы то ни было, я обнаружил, что cv.HoughCircles прерывается, если не может обнаружить круглую форму на изображении, вместо изящного возврата пустого списка.

0 голосов
/ 26 января 2011

Память должна быть больше, я подумал, что cvMat не выделен динамически, поэтому вы должны, например, изменить строку:

storage = cv.CreateMat(1, 2, cv.CV_32FC3)

до:

storage = cv.CreateMat(1, img.rows * img.cols, cv.CV_32FC3)
0 голосов
/ 29 мая 2010

Изображения действительны?
Можете ли вы отобразить их (оригинал и оттенки серого)

В противном случае вы уверены, что аргументы функции верны? Вы правильно передаете указатели или ссылки

...