我尝试使用HoughCircles方法的JavaCV实现,但我遇到了一些参数问题。 这是我的代码:
Mat currentImageGray = tgtFrag.getImage().clone();
Mat detectedCircles = new Mat();
HoughCircles(currentImageGray, detectedCircles, CV_HOUGH_GRADIENT, 1, 2, 254, 25, tgtFrag.getImage().rows() / 4, 0 );
if (detectedCircles != null && !detectedCircles.empty()) {
// TO DO:
// Print the center and the raidus of the detected circles.
}
首先,检测结果(HoughCircles
的第二个段)以Mat(detectedCircles
)给出。
我想处理detectedCircles
Mat并以某种方式打印控制台上的圆心和半径。到目前为止,我的尝试失败了:我一直尝试使用detectedCircles
来迭代FloatBufferIndexer
,可能是正确的方向,但我还没有成功,任何人都可以提供帮助?< / p>
请注意以下事项:
答案 0 :(得分:1)
我只能使用JavaCV cvHoughCircles方法,但不知道如何使用HoughCircles方法。这是我对你的代码的改编。
// Get the source Mat.
Mat myImage = tgtFrag.getImage();
IplImage currentImageGray = new IplImage(myImage);
CvMemStorage mStorage = CvMemStorage.create();
CvSeq detectedCircles = cvHoughCircles(currentImageGray, mStorage, CV_HOUGH_GRADIENT, 1, 2, 254, 25, tgtFrag.getImage().rows() / 4, 0);
if (detectedCircles != null && detectedCircles.total() > 0) {
for (int i = 0; i < detectedCircles.total(); i++) {
CvPoint3D32f curCircle = new CvPoint3D32f(cvGetSeqElem(detectedCircles, i));
int curRadius = Math.round(curCircle.z());
Point curCenter = new Point(Math.round(curCircle.x()), Math.round(curCircle.y()));
System.out.println(curCenter);
System.out.println(curRadius);
}
}
即使这不能直接解决您的问题,但我希望这可能有所帮助。