如何获取轮廓的像素点?
Posted
技术标签:
【中文标题】如何获取轮廓的像素点?【英文标题】:How to get the pixel points of the contours? 【发布时间】:2014-10-10 07:55:16 【问题描述】:如何找到轮廓中的像素点?假设我在做findContours
之后有一个有 5 个轮廓的图像,我知道我们可以使用drawContour
函数来绘制轮廓,但我需要知道形成轮廓的像素点。
例如:
cv::medianBlur(img1,img1,7);
Canny(src1,img1,250,350,3);
imshow("abc",img1);
vector< vector<Point> > contours;
findContours(img1, contours, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_NONE);
for(int i=0;i<contours.size();i++)
cv::drawContours(src2,contours,i,Scalar(255,100,200),2);
我这样做并得到了这个图像现在我想现在形成轮廓的像素点,例如(x1,Y1)
,(x2,y2)
,...
我如何获得这些信息? ,
【问题讨论】:
【参考方案1】:当您在代码中编写自己的代码时,变量 contours
是一个 vector< vector<Point> >
:点向量的向量。意思是,每个轮廓都是一个点向量。
这意味着,contours[0]
将为您提供一个点向量(对应于第 0 个轮廓),contours[1]
将为您提供另一个点列表,依此类推。
【讨论】:
【参考方案2】:轮廓是Point
的二维vector
。因此,要访问每个点,您可以使用 2 个for
循环(代码显示每个点的 x-y 坐标和轮廓 ID),如下所示 -
for(int i = 0; i < contours.size; i++)
for(int j = 0; i < contours.size; j++)
cout << "ID = " << i << "( " << contours[i][j].x
<< " , " << contours[i][j].y << " )"<< endl;
您实际上可以通过使用approxPolyDP
来减少轮廓中的点数,以更好地可视化数据。查看文档here。
【讨论】:
以上是关于如何获取轮廓的像素点?的主要内容,如果未能解决你的问题,请参考以下文章