PDA

View Full Version : پیدا کردن خطوط عمود بر هم به صورت L و T



shahe_iran
جمعه 21 مهر 1391, 11:11 صبح
سلام

من از کتابخونه EMGU که نسخه سی شارپ openCV هست استفاده میکنم

میخوام گوشه های زمین فوتبال که یه صورت خطوط L و T هستند رو پیدا کنم ، کد زیر رو هم برای همین منظور نوشتم اما همچنان خطوط موازی رو هم نشون میده ، کلا همه خطوط رو نشون میده و شروطی که گذاشتم انگار تاثیر خاصی نداره!

دیگه راهی به عقلم نمیرسه ، اگر ممکنه راهنمایی کنید :



foreach (LineSegment2D l1 in lines)
{
foreach (LineSegment2D l2 in lines)
{
if (Math.Abs(l1.P2.X) - Math.Abs( l1.P1.X) != 0 &&
Math.Abs(l2.P2.X )- Math.Abs(l2.P1.X) != 0)

{
slope_l1 = Math.Abs(l1.P2.Y - l1.P1.Y) / Math.Abs(l1.P2.X - l1.P1.X);
slope_l2 = Math.Abs(l2.P2.Y - l2.P1.Y) / Math.Abs(l2.P2.X - l2.P1.X);

angle_l1 = Math.Atan(slope_l1) *180/ Math.PI;
angle_l2 = Math.Atan(slope_l2) * 180/ Math.PI;



if (

Math.Abs(angle_l2 - angle_l1) > 80 && Math.Abs(angle_l2 - angle_l1) < 110))

{
img.Draw(l1, new Bgr(Color.Yellow), 2);


}

}
}
this.Invoke(new Action(delegate()
{

pictureBox1.Image = img.Bitmap;
}));

این کد اینطوری کار میکنه که ابتدا تابع houghLine میاد یکسری خطوط رو پیدا میکنه و داحل یک آرایه line2Dsegment میریزه و یک سری مشخصاتی مثل نقاط ایتدا و انتها ( p1 , p2 ) و یا مثلا lenght و چنتا دیگه رو واسه هر خطی پیدا میکنه

حالا من با اون فرمول سعی کردم اول شیب خط هارو حساب کنم و بعدش زاویه از خط هارو محاسبه کنم و بعدش بگم خطوطی که اختلاف زاویه بیش از 80 درجه و کمتر از 110 درجه دارند رو به عنوان عمود بر هم در نظر بگیره و نتیجه رو روی صفحه نشون بده ، اما همچنان خطوط موازی یا تقریبا موازی رو هم نشون میده!!:اشتباه:

مشکل از کحاست؟

shahe_iran
جمعه 21 مهر 1391, 11:22 صبح
وقتی هم که شرط رو به اینصورت تغییر میدم کلا هیچ خطی نشون نمیده دیگه!!

if( Math.Abs(angle_l2 - angle_l1) > 80 && Math.Abs(angle_l2 - angle_l1) < 110)
&& ((l1.P1 == l2.P2)|| (l1.P2==l2.P1)
|| (l1.P1==l2.P1) ||(l1.P2 == l2.P2) ))


شرط رو برای این اینطوری نوشتم که بگم خطوطی که با هم یک نقطه مشترک هم داشته باشند نشون بده ... گقتم احتمالا در حالت قبل حطوطی رو نشون میده که بر هم عمودند ولی نقطه مشترک ندارند ، واسه همین انگار داره خطوط موازی رو هم نشون میده

اما با این تعییر که دادم کلا هیچ خطی رو نشون نمیده!

shahe_iran
شنبه 22 مهر 1391, 09:15 صبح
یعنی هیچکس نظری نداره؟ :ناراحت: