gpt4 book ai didi

python - 如何在 Python 中访问 OpenCV HoughCircles 结果?

转载 作者:太空宇宙 更新时间:2023-11-03 13:22:59 24 4
gpt4 key购买 nike

我正在为虹膜相关生物识别开发概念验证算法。我希望能够在一系列图像上对其进行测试,但为此,我需要知道虹膜边界。以下使用的技术 here ,我对图像进行了过滤和智能阈值处理(Otsu 的方法),只留下瞳孔的黑眼圈。我尝试使用 OpenCV 的 HoughCircles 方法,但非 C(++) 文档很少。到目前为止,这是我的代码:

# Convert PIL to openCV type
cvImage = cv.CreateImageHeader(inputImage.size, cv.IPL_DEPTH_8U, 1)
cv.SetData(cvImage, inputImage.tostring())

self.cvSize = cv.GetSize(cvImage)

# Create storage for circles (there should only be one)
storage = cv.CreateMat(50, 1, cv.CV_32FC3)

# Get circles (why doesn't this work?)
circles = cv.HoughCircles(cvImage,storage,cv.CV_HOUGH_GRADIENT,2,(self.cvSize[0])/4,200,100);

最后一行是有问题的行。我关注了互联网上传播的几篇帖子(其中大部分是针对 C/C++ 或 5 年以上的帖子)并设法想出了那条线。它不会返回任何错误。我如何访问结果?我是访问 circles 还是 storage。我如何访问它们?我试过 this question 的建议,但是,正如提问者所说,cvMat 类型不可迭代,因此它不会工作。编写我自己的 Circular Hough Transform 似乎比处理这个库的稀疏文档要少一些工作,但我认为它是我缺少的一些简单的东西。

附带说明一下,我如何优化参数以始终在合理的时间内为瞳孔返回合适的圆?

最佳答案

cv.HoughLines2的例子完全不同,因为它的内存存储是这样的:

storage2 = cv.CreateMemStorage(0)

这不适用于 HoughCirclesHoughCircles 只能处理cvMat 存储,例如:

storage = cv.CreateMat(image.width, 1, cv.CV_32FC3)

重要的是,它只有 1 行,表示应该是 32 位 float 和 3 个 channel 。

例如,您有以下代码行:

circles=cv.HoughCircles(image,storage, cv.CV_HOUGH_GRADIENT, 100, 300,100,50)

因为cvMat函数的返回值是NULL,也就是说它在Python中是None(这个和C中类似,没有返回值,当存储为cvMat).

这意味着,唯一的输出是存储。您可以使用 numpy 解码结构:

np.asarray(storage)

这是我用圆心和半径绘制圆的代码,它是 HoughCircles 的结果。

for i in range(0,len(np.asarray(storage))):
cv.Circle(image, ( int(np.asarray(storage)[i][0][0]), int(np.asarray(storage)[i][0][1]) ), int(np.asarray(storage)[i][0][2]), cv.CV_RGB(255, 0, 0), 2, 8, 0 )

只有一个问题我还没有解决:中心点的X,Y坐标和半径完全不准确,我不知道他们有什么问题,也许你可以找到。

关于python - 如何在 Python 中访问 OpenCV HoughCircles 结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7788384/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com