我正在开发一种能够检测图像中圆形形状的程序。我决定Hough变换是最好的,我在OpenCV库中找到了一个。问题是,当我尝试使用它时,我得到一个错误,我不知道如何解决。 OpenCV for 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错误:未知函数中的空pinter(), 文件.. \ .. \ .. \ .. \ ocv \ openc \ src \ cxcore \ cxdatastructs.cpp,第408行 Traceback(最近一次调用最后一次): 文件“ellipse-detect-webcam.py”,第20行,in cv.HoughCircles(edge,storage,cv.CV_HOUGH_GRADIENT,2,gray.height / 4,200,100) cv.error
提前感谢您的帮助。
答案 0 :(得分:1)
对于它的价值,我发现如果cv.HoughCircles
无法检测到图像中的圆形形状,而不是优雅地返回空列表,则会{...}}中止。
答案 1 :(得分:0)
图像是否有效?
你能展示它们(原版和灰度)
否则你确定该函数的参数是否正确?您是否正确传递指针或引用
答案 2 :(得分:0)
存储空间必须更大,我认为cv Mat不是动态分配的,所以你必须更改一行:
storage = cv.CreateMat(1, 2, cv.CV_32FC3)
为:
storage = cv.CreateMat(1, img.rows * img.cols, cv.CV_32FC3)