opencv之轮廓的查找与绘制(二)

来源:互联网 发布:崩坏3矩阵空间攻略 编辑:程序博客网 时间:2024/05/21 22:54

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;
//输出轮廓(连通域)的个数
这里写图片描述

原创粉丝点击