2010-05-29 95 views
3

我正在研究檢測圖像中的圓形形狀的程序。我決定Hough變換是最好的,我在OpenCV庫中找到了一個。問題是,當我嘗試使用它時,我收到一個錯誤,我不知道如何解決。 OpenCV for 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無法檢測圖像中的圓形形狀,而不是優雅地返回空列表,則會中止cv.HoughCircles

0

圖像有效嗎?
您能否顯示它們(原始圖像和灰度圖)

否則您確定函數的參數是否正確?你路過的指針或引用正確

+0

我檢查了所有參數;他們似乎是對的。我正在使用http://www.seas.upenn.edu/~bensapp/opencvdocs/ref/opencvref_cv.htm#cv_imgproc – Dan 2010-05-29 01:21:31

0

的存儲必須要大一點,我認爲是與CvMat不dinamically分配的,所以你必須例如更改線路:

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

到:

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

上的C代碼檢查,「存儲」實際上是存儲圓圈列表的地方。所以'cv.CreateMat(1,max_circles,cv.CV_32FC3)'是正確的。 – ptomato 2011-03-30 14:38:22