2010-05-29 3 views
3

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

Вот код:

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 Error: Null pinter() in unknown function, file ..\..\..\..\ocv\openc\src\cxcore\cxdatastructs.cpp, line 408 Traceback (most recent call last): File "ellipse-detect-webcam.py", line 20, in cv.HoughCircles(edges, storage, cv.CV_HOUGH_GRADIENT, 2, gray.height/4, 200, 100) cv.error

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

ответ

1

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

0

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

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

+0

Я проверил все аргументы; они кажутся правильными. Я проверяю код C по адресу http://www.seas.upenn.edu/~bensapp/opencvdocs/ref/opencvref_cv.htm#cv_imgproc – Dan

0

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

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

к:

storage = cv.CreateMat(1, img.rows * img.cols, cv.CV_32FC3) 
+1

Нет, 'storage' на самом деле хранится список кругов. Поэтому 'cv.CreateMat (1, max_circles, cv.CV_32FC3)' является правильным. – ptomato

 Смежные вопросы

  • Нет связанных вопросов^_^