我需要从这张图片中找到圆圈的极点(左上角,右上角,左下角,最后是右下角)
图像通过阈值,然后在重叠回原始图像之前进行边缘检测。
并将它们连接在一起(通过绘画绘制)
但是我怎么想首先从中心得到半径和x和y坐标然后画线?
for (int i = 0; i < circles.size(); i++)
{
//icout << i<<"\n"<<endl;
Point center(cvRound(circles[i][ 0]), cvRound(circles[i][1]));
stringstream ss;
ss << i + 1;
putText(dst, ss.str(), center, 1, 1, Scalar(255, 0, 225 ), 2, 0);
int radius = cvRound(circles[i][2]);
// circle center
circle(src, center, 3, Scalar(0, 255, 0), -1, 8, 0);
// circle outline
circle(src, center, radius, Scalar(0, 0, 255), 3, 8, 0);
//for original image overlap
circle(dst, center, 3, Scalar(0, 255, 0), -1, 8, 0);
// circle outline
circle(dst, center, radius, Scalar(0, 255, 255), 3, 8, 0);
}
这是演示代码,但我很难理解 circles.size() 从
for (int i = 0; i < circles.size(); i++)
和
Point center(cvRound(circles[i][ 0]), cvRound(circles[i][1]));
如果你能以更简单的方式向我解释,我仍然感谢它,因为我还在学习过程中,这只是我开始的起点。
谢谢!
答案 0 :(得分:0)
我认为您需要显示圈子的定义,即圈子是什么类型
看起来可能是vector<vector<int>>
(或某种形式的tuple<int>
)
除非我误解了你的问题,circles.size()
是圆圈的数量而不是圆的半径(size()
)是一个返回向量中元素数量的函数
内部vector<int>
似乎存储了[0]
中的x位置和[1]
中的y位置
和[2]中圆的半径
答案 1 :(得分:0)
如果你看一下Circle hough transform http://docs.opencv.org/2.4/modules/imgproc/doc/feature_detection.html?highlight=houghcircles#houghcircles
上的opencv文档在变量圆圈下,您可以看到它是一个向量,每个圆是一个带有值(x,y,半径)的3元组
所以在你的情况下获取圈子i的数据:
xCoordinate = circles [i] [0]
yCoordinate = circles [i] [1]
radius = circles [i] [2]
circles.size():是找到的圈数。
之后为了找到左下角的点,例如只查找具有最低y坐标的6个点,并从该组中查找具有最小x坐标的点。