【发布时间】:2011-07-19 02:44:58
【问题描述】:
我正在尝试制作一个程序来打开图像,扫描它以查找圆形/圆形并返回坐标,以便我可以使用cv.Circle 函数在检测到的圆上绘制圆。
我的问题是:如何使用 cv.HoughCircles() 获取图像中检测到的圆的坐标/半径?
使用this 页面,我发现了如何检测圆圈(这花了我很多时间才发现,因为我不懂阈值之类的术语,而且 Python 的 OpenCV 文档真的很差,几乎没有) .不幸的是,在该页面上,它没有显示如何提取从创建的CvMat 中检测到的每个圆圈的信息。如何提取该信息/是否有其他方法(例如使用 MemoryStorage() )?
这是我目前的代码:
import cv, opencv
def main():
im = cv.LoadImageM("Proba.jpg")
gray = cv.CreateImage(cv.GetSize(im), 8, 1)
edges = cv.CreateImage(cv.GetSize(im), 8, 1)
cv.CvtColor(im, gray, cv.CV_BGR2GRAY)
cv.Canny(gray, edges, 50, 200, 3)
cv.Smooth(gray, gray, cv.CV_GAUSSIAN, 9, 9)
storage = cv.CreateMat(im.rows, 1, cv.CV_32FC3)
cv.HoughCircles(edges, storage, cv.CV_HOUGH_GRADIENT, 2, gray.height/4, 200, 100)
# Now, supposing it found circles, how do I extract the information?
print storage.r
if __name__ == '__main__':
main()
另外,HoughCircles 的最后两个参数需要具有什么值才能让我检测到非常小的圆圈(例如屏幕上的 3mm)?
感谢大家花费时间和精力来帮助我!
我正在使用的图像是这样的:
【问题讨论】:
-
您能否发布一个示例图像以便我可以测试我的代码?
标签: python opencv image-processing geometry detect