如何在轮廓中找到像素点?假设在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)
,...
我如何获得这些信息? ,
答案 0 :(得分:2)
当您在代码中写自己时,变量contours
是vector< vector<Point> >
:点向量的向量。意思是,每个轮廓都是一个点矢量。
这意味着,contours[0]
会给你一个点向量(对应于第0个轮廓),contours[1]
会给你另一个点列表,依此类推。
答案 1 :(得分:1)
轮廓是vector
的2D Point
。因此,要访问每个点,您可以使用2个for
循环(代码显示每个点与轮廓ID的x-y坐标),如下所示 -
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。