OpenVc判断矩形是否相交算法

转载 2015年11月19日 22:17:00

在opencv中,对于跟踪的目标,通常用矩形进行圈定,但是Opencv的cvFindContours却不会那么精确,通常会将一个目标分成若干个相邻或相交或包含关系的矩形,此时需要判断这些矩的关系,以便进行融合,矩形之间的关系通常又很复杂,通常会有如下关系




在网上还确实不好找,有的是基于两条线是否相交,然后进行两两相交16次判断,但很多算法有bug,最典型是两条X一样的直线不相交会判断成相交,另外呢,由于矩形是平的或是垂直的,没必要复杂的数学运算。

做了两个函数,一个是判断线相交,一个是判断矩形相交,代码不用细看,直接用就行了

1、直线是否相交

BOOL IsLineSegmentCross(POINT pt1, POINT pt2, POINT pt3, POINT pt4,int iLinesRelation)
{
 int iL1,iL2,iL3,iL4,iMax;
 if(iLinesRelation==0)  //平行关系
 {
  if(pt1.y==pt2.y)//横线
  {
   if(pt1.y!=pt3.y)
    return FALSE;
   else    //两条线Y值相同
   {
    iL1=abs(pt1.x-pt2.x);
    iL2=abs(pt3.x-pt4.x);
    iL3=abs(pt3.x-pt2.x);
    iL4=abs(pt4.x-pt1.x);
    if(iL3>iL4)
     iMax=iL3;
    else
     iMax=iL4;
    if(iL1+iL2
     return FALSE;
    else
     return TRUE;
   }
  }
  else     //坚线
  {
   if(pt1.x!=pt3.x)
    return FALSE;
   else
   {
    iL1=abs(pt1.y-pt2.y);
    iL2=abs(pt3.y-pt4.y);
    iL3=abs(pt2.y-pt3.y);
    iL4=abs(pt1.y-pt4.y);
    if(iL3>iL4)
     iMax=iL3;
    else
     iMax=iL4;
    if(iL1+iL2
     return FALSE;
    else
     return TRUE;
   }
  }
 }
 else      //垂直关系
 {
  if(pt1.y==pt2.y)//横线
  {
   if(pt3.xpt2.x)
    return FALSE;
   else
   {
    if(pt1.y>=pt3.y&&pt1.y<=pt4.y)
     return TRUE;
    else
     return FALSE;
   }
  }
  else     //坚线
  {
   if(pt1.xpt4.x)
    return FALSE;
   else
   {
    if(pt3.y>=pt1.y&&pt3.y<=pt2.y)
     return TRUE;
    else
     return FALSE;
   

【算法】计算机图形学的一些经典小题:判断点在多边形内,随机生成三角形内的点,判断两个矩形是否相交等

前几天面试的时候被问到了,如何随机在三角形内生成点,我按照我的想法回答了一遍,但觉得回答的不够好。最后面试官说了一个最优的方法。觉得不错,顺带总结一下最近看到的一些关于计算机图形学方面的经典小题,知乎...

Halcon实战记录之二《判断两个直线或者矩形是否相交》

项目中使用到需要判断两个矩形是否相交,由于我使用Halcon不久,对其算子还不熟悉,不知道是否有现成的算子可以直接实现,如果有,还请各位朋友给留言指出,先谢谢了,我这里用了如下的方法。...

如何判断两个矩形是否相交

如果两个矩形相交,则必然存在线条交叉,而能交叉的线条只有横线和竖线,两根横线或两根竖线都不可能交叉。所以,这个问题就转化成寻找是否存在交叉的横线与竖线。   另外,A线与B线交叉等价于B线与A线交叉...

面试题:判断一个圆和一个矩形是否相交

题目:用最简单,最快速的方法计算出下面这个圆形是否和正方形相交。 3D 坐标系原点(0.0,0.0,0.0) 圆形: 半径r = 3.0 圆心o = (*.*, 0.0, *.*) 正方形:...

POJ 1410 Intersection (判断线段与矩形是否相交)

Intersection Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 9536   A...
  • acbron
  • acbron
  • 2013年04月10日 21:00
  • 280

POJ 1410 Intersection (判断线段是否与矩形相交)

题目大意:给定一条线段的起始和终止点的坐标,和一个矩形的左上和右下的坐标,判断线段是否与矩形相交。注意:矩形是实心       的,而且矩形的两点坐标不一定是按照左上、右下的顺序。 解题思路:首...

快速判断两个矩形是否相交

两个矩形之间的位置关系无外乎图中的5中case. 难道我们要每个case都要判断一边,然后决定是否相交? 其实是有通用方法的。 如果两个矩形相交,那么矩形A B的中心...
  • szfhy
  • szfhy
  • 2015年11月09日 16:26
  • 783

判断两个矩形是否相交(C++)

最近在研究opencv识别红绿灯的任务,用的是机器学习+图像处理的方法,但有个麻烦的问题就是误识别率很高,为了把这些误识别出的物体给过滤点,我想到了通过颜色占比的方法来过滤,结果是可以过滤点一部分,但...

[面试]——用一行代码判断两矩形是否相交

typedef struct { int left; // leftmost: 最左 int top; // topmo...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:OpenVc判断矩形是否相交算法
举报原因:
原因补充:

(最多只允许输入30个字)