Imgproc_4_图像轮廓

一图像轮廓

1,查找并绘制轮廓
1>查找轮廓

void findContours(InputOutputArray image, 
                  OutputArrayOfArrays contours, 
                  OutputArray hierarchy, int mode, 
                  int method, Point offset=Point())
/*image,单通道8-bit,二值图像
 *contours,检测到的轮廓,用vector<Point>代表每一个轮廓
 *hierarchy,可选的输出向量,包含图像拓扑信息,对于每一个
 *contours[i]对应4个,hierarchy[i][0]~hierarchy[i][3]分别
 *表示后一个轮廓,前一个轮廓,父轮廓,内嵌轮廓的索引编号,如果没有
 *对应项则设为负数
 *mode(轮廓的检索模式):
 *CV_RETR_EXTERNAL,只检索外轮廓
 *这种情况下hierarchy[i][2]=hierarchy[i][3]=-1
 *CV_RETR_LIST,检索所有轮廓,但是不建立hierarchy
 *CV_RETR_CCOMP,检索所有轮廓,并将它们组织成双层hierarchy,顶
 *层是外部边界,第二层为洞的边界。
 *CV_RETR_TREE,检索所有轮廓,重构所有轮廓的hierarchy
 *method(轮廓的近似方法):
 *CV_CHAIN_APPROX_NONE:获取轮廓的点,相邻两个点位置差为1,  
 *max(abs(x1-x2),abs(y2-y1))==1
 *CV_CHAIN_APPROX_SIMPLE:只保留水平,垂直,对角线方向的元素
 *CV_CHAIN_APPROX_TC89_L1,CV_CHAIN_APPROX_TC89_KCOS:
 *Teh-Chin chain 近似算法的一种
 *offset,每个轮廓点的可选偏移量,在图像ROI中提取,应用到整张图像
 *时很有用
 */                

2>绘制或填充轮廓

void drawContours(InputOutputArray image, 
                  InputArrayOfArrays contours, 
                  int contourIdx, const Scalar& color, 
                  int thickness=1, int lineType=8, 
                  InputArray hierarchy=noArray(), 
                  int maxLevel=INT_MAX, 
                  Point offset=Point() )
/*image,目标图像
 *contours,存储的所有轮廓,vector<vector<Point>>
 *contourIdx,指示要绘制第几个轮廓,如果为负,则全部绘制
 *thickness,线的厚度,如果为负,则将轮廓填充
 *maxLevel,绘制轮廓的最大等级,if0,只绘制contourIdx指定的
 *轮廓,if1,绘制指定轮廓和所有嵌套轮廓,if2,绘制所有,需要
 *hierarchy
 */                  

3>检测点是否在轮廓内

double pointPolygonTest(InputArray contour, Point2f pt, 
                        bool measureDist)
//contour,输入轮廓,pt,为测试点
//measureDist,if true,返回pt距离轮廓边最近距离,否则只检测是
//否在轮廓内
//在轮廓内,轮廓边上,轮廓外,分别返回正数,0,复数,当
//measureDist=false时,返回1,0,,1                        

使用步骤:

//Canny边缘检测转化成二值图像
cv::cvtColor(Image,Image,CV_BGR2GRAY);
cv::GaussianBlur(Image,Image,cv::Size(3,3),0);
cv::Canny(Image,Image,30,90);

//查找轮廓
std::vector<std::vector<cv::Point>> contours;
std::vector<cv::Vec4i> hierarchy;
cv::findContours(Image,contours,hierarchy,
        CV_RETR_TREE,CV_CHAIN_APPROX_SIMPLE);

//利用随机数,将轮廓一个一个画出来,便于分清。
cv::RNG rng;
result=cv::Mat
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值