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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值