1)如何访问每一个轮廓
for(int i=0;i< contours.size();i++)
{
………….
}
vector < vector /Point>>contours;//注这有个/是< 的意思
(每个轮廓的点集 size()单个轮廓中点的个数)
(所有的轮廓集合 size() 轮廓的个数)
2)如何访问每一个轮廓的所有点
ex2:
for(int i=0; i < contours.size();i++)
{
for(iny j=0;j < contours[i].size();j+=15)//每隔15个点
{
circle(dst,Point(contours[i][j].y3,Scalar(0,255,0),2,8));
waitKey(100);
line(dst,Point(10,10),Point(contours[i][j].x,contours[i][j].y),Scalar(0,0,255),1,8);
imshow(“dst”,dst);
}
}
void main()
{
Mat srcImg=imread("22.jpg");
Mat tempImg=srcImg.clone();//原图备份
cvtColor(srcImg,srcImg,CV_BGR2GRAY);
threshold(srcImg,srcImg,100,255,CV_THRESH_BINARY_INV);//二值化操作
vector<vector<Point>>contoues;//轮廓的定义
vector<Vec4i>hierarcy;
findContours(srcImg,contours,hierarcy,CV_RETR_TREE,CV_CHAIN_APPROX_NONE);//查找轮廓
//drawContours(tempImg,contours,-1,Scalar(0,255,0),2,8);//绘制轮廓
for(int i=0;i<contours.size();i++)
{//绘制每一个轮廓
// drawContours(tempImg,contours,i,Scalar(0,255,0),2,8);
for(int j=0;j<contours[i].size;j++)//像素点加1
{
circle(tempImg,Point(contours[i][j].x,contours[i][j].y),2,Scalar(0,255,0),1,8);//画出每一个轮廓的每个点
line(tempImg,Point(10,10),Point(contours[i][j].x,contours[i][j].y),Scalar(0,0,255),1,8);
waitKey(100);
imshow("contours",tempImg);
}
}
imshow("contours",tempImg);
waitKey(0);
}
、、应用于孔洞的填充
……..连通域的标记
count<<”num=”<< contours.size()/< endl;
//输出轮廓(连通域)的个数