判断一个点是否在RotatedRect中

简介: openCV函数pointPolygonTest():C++: double pointPolygonTest(InputArray contour, Point2f pt, bool measureDist)用于判断一个点是否在轮廓中 当measureDist设置为true时,若返回值为正,表示点在轮廓内部,返回值为负,表示在轮廓外部,返回值为0,表示在轮廓上。

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://stackoverflow.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/





目前方向:图像拼接融合、图像识别 联系方式:jsxyhelu@foxmail.com
目录
相关文章
|
存储 移动开发 缓存
uniapp本地存储的几种方式
uniapp本地存储的几种方式
1555 0
|
人工智能 算法 开发工具
Mixtral 8X7B MoE模型在阿里云PAI平台的微调部署实践
Mixtral 8x7B 是Mixtral AI最新发布的大语言模型,是当前最为先进的开源大语言模型之一。阿里云人工智能平台PAI,提供了对于 Mixtral 8x7B 模型的全面支持,开发者和企业用户可以基于 PAI-快速开始轻松完成Mixtral 8x7B 模型的微调和部署。
|
7月前
|
人工智能 安全 算法
深度解析DeepSeek一体机哪家好?deepseek一体机排名及选型参考
本文详细解析了DeepSeek一体机的选型框架与主流厂商产品对比,从技术架构、性能指标、场景覆盖、安全合规及成本效率五个维度展开分析。重点推荐优刻得DeepSeek一体机,其国产化率超95%,推理延迟仅83ms(领先行业45%),综合成本低于自建30%,已在多家省级政务云平台应用。此外,华为云与阿里云分别在混合云协同与云边协同方面表现突出,但成本较高。未来,DeepSeek一体机将向存算一体芯片、多模态能力增强等方向发展。对于金融、政务、医疗等行业用户,优刻得是首选方案。
|
计算机视觉
OpenCV(三十四):轮廓外接最大、最小矩形和多边形拟合
OpenCV(三十四):轮廓外接最大、最小矩形和多边形拟合
1121 0
|
网络协议 安全 调度
关闭Windows自动更新的6种方法
本文介绍了六种关闭Windows自动更新的方法,包括使用服务管理器、组策略编辑器、修改注册表、任务计划程序、网络连接设置和命令行。
6109 0
|
监控 安全 Java
解析Spring Boot中的Actuator端点
解析Spring Boot中的Actuator端点
|
Ubuntu 关系型数据库 MySQL
Mysql8.0在Ubuntu安装
Mysql8.0在Ubuntu安装
|
缓存 Kubernetes Linux
CentOS 7上的GitLab Runner,让你的项目加速奔跑
CentOS 7上的GitLab Runner,让你的项目加速奔跑
695 1
|
Python
Python中的反对称矩阵(Skew-Symmetric Matrices)
Python中的反对称矩阵(Skew-Symmetric Matrices)
566 2
|
负载均衡 安全 Java
【C++ 并发 线程池】轻松掌握C++线程池:从底层原理到高级应用(一)
【C++ 并发 线程池】轻松掌握C++线程池:从底层原理到高级应用
1922 2