تقاطع 2 خط در OpenCV - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

تقاطع 2 خط در OpenCV

+1 امتیاز
96 بازدید
قصد دارم نقطه تقاطع 2 تا خط را محاسبه کنم .آیا OpenCv تابعی برای اینکار داره که نقطه تقاطع دو خط را محاسبه کنه ؟
سوال شده بهمن 10, 1392  بوسیله ی farnoosh (امتیاز 2,082)   3 11 43

1 پاسخ

+4 امتیاز
 
بهترین پاسخ

اگر پاره خط باشه و شما 2 نقطه داشته باشید از قطعه کد زیر استفاده کنید.

bool BhLineIntersection4( const Point& A1, const Point& A2, const Point& B1, const Point& B2, Point &intersection)
{
	Point a;
	a.x = A2.x - A1.x;
	a.y = A2.y - A1.y;

	Point b;
	b.x = B2.x - B1.x;
	b.y = B2.y - B1.y;

	int f = PerpDot(a,b);
	if(!f)      // lines are parallel
		return false;

	Point c;
	c.x = B2.x - A2.x;
	c.y = B2.y - A2.y;

	int aa = PerpDot(a,c);
	int bb = PerpDot(b,c);

	if(f < 0)
	{
		if(aa > 0)     return false;
		if(bb > 0)     return false;
		if(aa < f)     return false;
		if(bb < f)     return false;
	}
	else
	{
		if(aa < 0)     return false;
		if(bb < 0)     return false;
		if(aa > f)     return false;
		if(bb > f)     return false;
	}

	float out = 1.0 - ((float)aa / f);


	intersection = Point( ((B2.x - B1.x) * out) + B1.x ,((B2.y - B1.y) * out) + B1.y);

	return true;
}

 

و اگر خطوط به صورت یک نقطه و زاویه خط باشه از روش زیر استفاده کنید.

CvPoint linesInterSectionPoint(CvPoint p1,CvPoint p2,float deg1,float deg2)
{
	
  float m1 =  tan( deg1);
  float m2 =  tan( deg2);

  double x,y;



  x =  (m1* p1.x - m2 * p2.x + (p2.y - p1.y)) / (m1-m2) ;
  y = m1 * (x - p1.x) + p1.y ;
  
  return cvPoint(cvRound(x),cvRound(y));
}

 

پاسخ داده شده بهمن 26, 1392 بوسیله ی مصطفی ساتکی (امتیاز 16,378)   16 24 66
...