Я разрабатываю алгоритм проверки концепции для биометрии, связанной с радужной оболочкой. Я хотел бы проверить это на серии изображений, но для этого мне нужно знать границы радужной оболочки. Следуя методам, использованным здесь, я отфильтровал и интеллектуально обработал изображение (метод Оцу), что оставляет меня просто темный круг зрачка. Я пытался использовать метод HoughCircles
OpenCV, но документации, отличной от 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, чем иметь дело с скудной документацией этой библиотеки, но я думаю, что это что-то простое, чего мне не хватает.
Кстати, как мне оптимизировать параметры, чтобы всегда возвращать подходящую окружность для зрачка за разумное время?
circles
похож, что он должен быть итерируемым. - person sarnold   schedule 17.10.2011