如何获取轮廓的像素点?

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&lt; vector&lt;Point&gt; &gt; :点向量的向量。意思是,每个轮廓都是一个点向量。

这意味着,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。

【讨论】:

以上是关于如何获取轮廓的像素点?的主要内容,如果未能解决你的问题,请参考以下文章

halcon怎么求提取轮廓亚像素点

使用opencv获取(内边缘)轮廓像素

OpenCV在轮廓边界内获取黑色像素

如何获取PNG图片某点像素的rgba值

如何从labview显示出点图片中,提取出鼠标所在位置的像素坐标?

如何获取超像素分割后的每个小块