我正在为虹膜相关的生物识别技术开发概念验证算法。我希望能够在一系列图像上对其进行测试,但为了做到这一点,我需要知道虹膜边界。按照这里使用的技术,我对图像进行了过滤和智能阈值处理(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
. 我如何访问它们?我已经尝试过这个问题的建议,但是,正如提问者所说,该cvMat
类型不可迭代,所以它不起作用。编写我自己的 Circular Hough 变换而不是处理这个库的稀疏文档似乎会少一些工作,但我认为我缺少一些简单的东西。
附带说明一下,我如何优化参数以始终在合理的时间内为瞳孔返回拟合圆?