判断一个点是否在RotatedRect中

时间:2021-07-11 14:43:05

openCV函数pointPolygonTest():

C++: double pointPolygonTest(InputArray contour, Point2f pt, bool measureDist)

用于判断一个点是否在轮廓中 
当measureDist设置为true时,若返回值为正,表示点在轮廓内部,返回值为负,表示在轮廓外部,返回值为0,表示在轮廓上。 
当measureDist设置为false时,若返回值为+1,表示点在轮廓内部,返回值为-1,表示在轮廓外部,返回值为0,表示在轮廓上。 
例:

……/// 查找轮廓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;
}
……


但是这个函数是用来处理“轮廓”,也就是点的集合的;对于这里RotatedRect,它本身只是一个OpenCV的数据结构,所以我们如果想使用pointPolygonTest,就需要首先将RotatedRect转换为轮廓。对于RotatedRect,其实转换很简单,直接将它的四个角的坐标塞到一个Vector<point>里面就可


以,当然了,对于其它复杂轮廓来说,可能会需要更多操作。


那么,最后合成的程序为:

bool DoesRectangleContainPoint(RotatedRect rectangle, Point2f point) {

    //Get the corner points.
    Point2f corners[4];
    rectangle.points(corners);

    //Convert the point array to a vector.
    //https://*.com/a/8777619/1997617
    Point2f* lastItemPointer = (corners + sizeof corners / sizeof corners[0]);
    vector<Point2f> contour(corners, lastItemPointer);

    //Check if the point is within the rectangle.
    double indicator = pointPolygonTest(contour, point, false);
    bool rectangleContainsPoint = (indicator >= 0);
    return rectangleContainsPoint;
}


需要注意的是,在这里indicator >= 0,如果你是判断是否在轮廓上,要修改为indicator == 0

参考:http://answers.opencv.org/question/30330/check-if-a-point-is-inside-a-rotatedrect/

判断一个点是否在RotatedRect中的更多相关文章

  1. js判断一个元素是否在数组中

    js判断一个元素是否在数组中 var arr = ['a','s','d','f']; console.info(isInArray(arr,'a'));//循环的方式 function isInAr ...

  2. 【JS】【6】判断一个元素是否在数组中

    摘要: 有三种方式: 1,jquery的inArray方法 2,数组的indexOf方法 3,普通的for循环方法 正文: 1,jquery的inArray方法 /** * @param {Objec ...

  3. python中如何不区分大小写的判断一个元素是否在一个列表中

    python中判断某一个元素是否在一个列表中,可以使用关键字in 和 not in. 示例如下: 如果需要输出相应的信息,可以搭配使用if语句,这里不赘述. --------------------- ...

  4. indexOf&lpar;&rpar; 如何判断一个元素在指定数组中是否存在? 找出指定元素出现的所有位置? indexOf&lpar;&rpar;方法 是正序查找,lastIndexOf&lpar;&rpar;是倒叙查找

    indexOf()方法返回在数组中可以找到一个给定元素的第一个索引,如果不存在,则返回-1. let a = [2, 9, 7, 8, 9]; a.indexOf(2); // 0 a.indexOf ...

  5. jquery 判断一个元素是否在数组中 &dollar;&period;inarry&lpar;&rpar;使用

    需要判断一个元素是否在一个数组里: js indexOf()方法  如果存在 则返回该元素的下标值 如果不存在则返回-1 学习源头: http://www.w3school.com.cn/jsref/ ...

  6. Python3基础 in 列表名 判断一个元素是否在列表中

    镇场诗:---大梦谁觉,水月中建博客.百千磨难,才知世事无常.---今持佛语,技术无量愿学.愿尽所学,铸一良心博客.------------------------------------------ ...

  7. Revit API 判断一个构件在某个视图中的可见性

    查看 Revit API.发现有Element::IsHidden这个方法.通过UI创建一个element,注意要使得这个element在某些视图可见,但是在另一些视图不可见.运行下面的方法,你会发现 ...

  8. Python3基础 list in&sol;not in 判断一个变量是否在列表中存在

             Python : 3.7.0          OS : Ubuntu 18.04.1 LTS         IDE : PyCharm 2018.2.4       Conda ...

  9. JavaScript 中 如何判断一个元素是否在一个数组中

    <script type="text/javascript"> var arrList=['12','qw','q','v','d','t']; console.log ...

随机推荐

  1. Java基础---AWT

    流式布局FlowLayout package net.zyz; import java.awt.Button; import java.awt.FlowLayout; import java.awt. ...

  2. CentOS7&period;1配置远程桌面

    网上看了很多资料,完全是乱的. 我使用的是CentOS7.1的系统.我的要求是windows的客户机可以远程访问CentOS系统. 1,首先需要检查一下服务器是否已经安装了VNC服务,检查服务器的是否 ...

  3. &lbrack;Phonegap&plus;Sencha Touch&rsqb; 移动开发24 包wp8&period;1的App,弹出软键盘输入框聚焦实施后,无移动采收率方法来解决接口

    这种现象不仅是现在显示phonegap包sencha touch的wp8.1该程序将出现(只wp8.1,wp8正常).其他js我测试了几个框架(app framework, jquery mobile ...

  4. 4、安卓数据存储——sqlite

    朋友圈里的每一个消息体里面的数据,当下拉刷新从服务器下载数据包后,存入sqlite:用户名.图片url.点赞.评论等等.上拉加载的时候,从数据库里取出最近的5条数据加载到朋友圈上. Android通过 ...

  5. iOS-导航头像缩放,支持点击回调

    在很多App中,经常存在一种需求就是,界面上下滚动时用户的头像也会跟着滚动,而用户头像在视图向上滚动一定范围时停留并在导航栏的位置 基本用法如下:1.单纯的实现这一效果: - (LEOHeaderVi ...

  6. java 线程池 ---- newFixedThreadPool&lpar;&rpar;

    class MyThread implements Runnable{ private int index; public MyThread(int index){ this.index = inde ...

  7. python处理Excel - xlrd xlwr openpyxl

    python处理Excel - xlrd xlwr openpyxl 1 xlrd和xlwt Todo: 使用xlrd和xlwt读写Excel文件的方法和示例代码,待续... 参考链接: Creati ...

  8. Spring学习记录

    Java类定义配置@Configuration //标记为配置类@ComponentScan //标记为扫描当前包及子包所有标记为@Component的类@ComponentScan(basePack ...

  9. 看不懂霍尔效应的直接看视频https&colon;&sol;&sol;www&period;bilibili&period;com&sol;video&sol;av11446173&sol;

    霍尔效应: 有些手机带有皮盖,就是皮盖打开的时候手机自动亮屏,皮盖和上的时候手机自动黑屏,利用的就是霍尔传感器,其实皮盖里面就是有个小磁铁而已: 当然了霍尔效应的电压也就几个毫伏,很小,所以得放大才能 ...

  10. React 模板

    <!DOCTYPE html><html><head lang="en"> <meta charset="UTF-8" ...