专栏首页微卡智享C++ OpenCV点是否在给定的轮廓中来判断

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

寻找轮廓的方法在前面和章里面都经常用到了,如果我们判断一个点是否在轮廓里面的话,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-

本文分享自微信公众号 - 微卡智享(VaccaeShare)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-05-29

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • java练习本(2019-06-27)

    C.abstract interface C extends D,E//D、E为已定义的接口{abstract void fun(){};}

    微笑的小小刀
  • 计网实验操作记录

    在dhcp-config模式下设置地址范围和子网掩码,network x.x.x.x 255.255.255.0

    gojam
  • Component之C++

    首先,VxWorks支持C++编程,毕竟面向对象语言功能强大。不过因为性能的原因,在实时系统里,更多的还是使用C语言来编程。尤其在信号和中断处理函数里调用C++...

    Taishan3721
  • Utility之printf的格式化输出与转义字符

    printf() - 向标准输出设备写入格式化语句。成功输出后,返回输出的字符数;否则返回负值

    Taishan3721
  • Xcode添加库文件framework (转)

    首先来看什么是库,库(Library)说白了就是一段编译好的二进制代码,加上头文件就可以供别人使用。

    庞小明
  • C++ STL map容器值为指针时怎么释放内存

    最近在使用STL中map时,遇到了一个问题,就是当map中值为指针对象时怎么释放内存?

    ccf19881030
  • PHP 的 self 关键字

    PHP群里有人询问 self 关键字的用法,答案是比较明显的:静态成员函数内不能用 this 调用非成员函数,但可以用 self 调用静态成员函数/变量/常量;...

    猿哥
  • VC++DLL动态链接库程序

    最近查找了一下VC++中关于编写DLL动态库的资料,主要是导出函数和导出类的编写。因为在实际项目开发中有时需要使用C++编写好DLL接口,控制设备,提供给其他语...

    ccf19881030
  • UGL之Simulator里的WindML

    WindML - Wind River Media Library。听上去是个多媒体库,但大家一直把它当作图形库,据说当初第一个版本的名字就叫UGL。目前最低版...

    Taishan3721
  • 【CPLEX教程02】配置Cplex的Java环境以及API说明

    因为小编一般用的C++和Java比较多,而且现在开发大型算法用这类面向对象的编程语言也方便得多。基于上面的种种考虑,加上时间和精力有限,所以就暂时只做C++和J...

    短短的路走走停停

扫码关注云+社区

领取腾讯云代金券