前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C++ OpenCV点是否在给定的轮廓中来判断

C++ OpenCV点是否在给定的轮廓中来判断

作者头像
Vaccae
发布2019-07-24 13:07:18
2.6K0
发布2019-07-24 13:07:18
举报
文章被收录于专栏:微卡智享微卡智享

寻找轮廓的方法在前面和章里面都经常用到了,如果我们判断一个点是否在轮廓里面的话,OpenCV有这个函数来进行判断。

相关API

double pointPolygonTest(InputArray contour, Point2f pt, bool measureDist)

  • contour ---输入轮廓
  • pt ---针对轮廓需要测试的点
  • measure_dist ---如果非0,函数将估算点到轮廓最近边的距离。

用于测试一个点是否在多边形中 当measureDist设置为true时,若返回值为正,表示点在多边形内部,返回值为负,表示在多边形外部,返回值为0,表示在多边形上。 当measureDist设置为false时,若返回值为+1,表示点在多边形内部,返回值为-1,表示在多边形外部,返回值为0,表示在多边形上。

检测点的核心代码

代码段一

/// 得到轮廓

std::vector<std::vector<cv::Point> > contours;

std::vector<cv::Vec4i> hierarchy;

cv::Mat src; //src为图像

//contours为函数findContours计算得到的轮廓点分布值

cv::findContours( src_copy, contours, hierarchy, RETR_TREE, CHAIN_APPROX_SIMPLE);

// 计算到轮廓的距离

cv::Mat raw_dist( src.size(), CV_32FC1 );

for( int j = 0; j < src.rows; j++ ){

for( int i = 0; i < src.cols; i++ ){

raw_dist.at<float>(j,i) = cv::pointPolygonTest( contours[0], Point2f(i,j), true );

}


代码段二

/// 查找轮廓 std::vector<std::vector<cv::Point> > contours; cv::Mat src; //src为输入图像 cv::findContours( src, contours, CV_RETR_EXTERNAL,CV_CHAIN_APPROX_SIMPLE,Point(0,0)); //判断p1(x,y)是否在轮廓内 cv::Point p1(x,y); if (pointPolygonTest(Contours[j],cv::Point(x1,y1),false) == 1) { cout<<p1<<"在轮廓内"<<endl; }


-END-

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-05-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 微卡智享 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档