0

如何找到轮廓中的像素点?假设我有一个图像,在完成后有 5 个轮廓findContours,我知道我们可以用函数绘制轮廓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)...这里

4

2 回答 2

2

当您在代码中编写自己时,该变量contoursvector< vector<Point> >: 点向量的向量。意思是,每个轮廓都是点的向量。

这意味着,contours[0]会给你一个点向量(对应于第 0 个轮廓),contours[1]会给你另一个点列表,依此类推。

于 2014-10-10T09:45:29.897 回答
1

轮廓是 2DvectorPoint。因此,要访问每个点,您可以使用 2 个for循环(代码显示每个点的 xy 坐标和轮廓 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您实际上可以通过使用来更好地可视化数据来减少轮廓中的点数。在此处查看文档。

于 2014-10-10T10:16:41.123 回答