OpenCV Python HoughCircles 错误
我正在开发一个程序,用来检测图片中的圆形。我觉得使用霍夫变换(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行 回溯(最近的调用在最后): 文件 "ellipse-detect-webcam.py",第20行, cv.HoughCircles(edges, storage, cv.CV_HOUGH_GRADIENT, 2, gray.height/4, 200, 100) cv.error
提前感谢你的帮助。
3 个回答
0
存储空间必须更大,我原以为cvMat不是动态分配的,所以你需要把这一行改成:
storage = cv.CreateMat(1, 2, cv.CV_32FC3)
改成:
storage = cv.CreateMat(1, img.rows * img.cols, cv.CV_32FC3)
0
这些图片有效吗?
你能显示它们吗(原始图片和灰度图片)
如果不能的话,你确定传给函数的参数是正确的吗?你有没有正确地传递指针或引用?
1
我发现,如果cv.HoughCircles
在图片中找不到圆形,它会直接中断,而不是优雅地返回一个空列表。