【发布时间】:2014-10-29 07:06:18
【问题描述】:
我想计算红色圆圈的半径(图 2)。我很难使用来自 OpenCV 的 HoughCircles 找到这些圆圈。如图所示。 2 我只能找到中心的小圆圈,使用 HoughCircles 显示为黑色。
原创图2。
由于我知道红色圆圈的中心(与红色圆圈相同),有没有办法简单地计算红色圆圈的半径?
是否也有可能在更复杂的图像上使用一种通用的方法来计算圆的半径,例如这个:
编辑:获得图 2 后我的代码中有趣的部分:
threshold(maskedImage, maskedImage, thresh, 255, THRESH_BINARY_INV | THRESH_OTSU);
std::vector<Vec3f> circles;
// Canny(maskedImage, maskedImage, thresh, thresh * 2, 3);
HoughCircles(maskedImage, circles, CV_HOUGH_GRADIENT, 1, src_gray.rows / 4, cannyThreshold, accumulatorThreshold, 0, 0);
Mat display = src_display.clone();
for (size_t i = 0; i < circles.size(); i++)
{
Point center(cvRound(circles[i][0]), cvRound(circles[i][1]));
int radius = cvRound(circles[i][2]);
// circle center
circle(display, center, 3, Scalar(0, 255, 0), -1, 8, 0);
// circle outline
circle(display, center, radius, Scalar(0, 0, 255), 3, 8, 0);
}
我尝试使用 cannyThreshold 和 accumulator 玩游戏,但没有结果。真实图像大 5 倍。这里a link 例如阈值后的 1。
谢谢
【问题讨论】:
-
你能展示你的 HoughCircles 代码吗?对于 HoughCircles afaik 来说,重叠/半圆等通常不是问题。
-
谢谢 Micka 我刚刚添加了一些代码
-
您可以将 maskedImage 保存到文件 (
imwrite("maskedImage.jpg", maskedImage)) 并发布链接吗? -
我们需要
maskedImage在threshold(maskedImage, maskedImage, thresh, 255, THRESH_BINARY_INV | THRESH_OTSU);之后而不是之前:) -
你能修复链接吗?