shahe_iran
جمعه 21 مهر 1391, 12: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 درجه دارند رو به عنوان عمود بر هم در نظر بگیره و نتیجه رو روی صفحه نشون بده ، اما همچنان خطوط موازی یا تقریبا موازی رو هم نشون میده!!:اشتباه:
مشکل از کحاست؟
من از کتابخونه 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 درجه دارند رو به عنوان عمود بر هم در نظر بگیره و نتیجه رو روی صفحه نشون بده ، اما همچنان خطوط موازی یا تقریبا موازی رو هم نشون میده!!:اشتباه:
مشکل از کحاست؟