- 1. قطعہ اور شکل
- 2. درجہ بندی اور بازیافت موڈ
- Cont. شکلوں کا اندازہ لگانا اور ان کا محرک ہل تلاش کرنا
- 4. محدب ہل
- 5. شکلوں کے ذریعہ سموچ کا مقابلہ کرنا
- 6. شکلوں کی شناخت (دائرہ ، مستطیل ، مثلث ، مربع ، ستارہ)
- 7. لائن کی کھوج
- 8. بلاب کا پتہ لگانا
- 9. بلب کو فلٹر کرنا - حلقوں اور بیضوی گنتی کرنا
پچھلے سبق میں ، ہم نے بنیادی امیج پروسیسنگ کے لئے اوپن سی وی کا استعمال کیا ہے اور کچھ ایڈوانس تصویری ترمیمی کارروائی کی ہے۔ جیسا کہ ہم جانتے ہیں ، اوپن سی وی اوپن سورس کامیوٹر ویژن لائبریری ہے جس میں C ++ ، ازگر اور جاوا انٹرفیس موجود ہیں اور ونڈوز ، لینکس ، میک او ایس ، آئی او ایس اور اینڈروئیڈ کی حمایت کرتا ہے۔ لہذا یہ راسبیری پائی میں ازگر اور لینکس ماحول کے ساتھ آسانی سے انسٹال کیا جاسکتا ہے۔ اور راسبیری پائی کے ساتھ اوپن سی وی اور منسلک کیمرا بہت سے ریئل ٹائم امیج پراسیسنگ ایپلی کیشنز بنانے کے لئے استعمال کیا جاسکتا ہے جیسے چہرہ کا پتہ لگانا ، چہرہ لاک ، آبجیکٹ سے باخبر رہنے ، کار نمبر پلیٹ کا پتہ لگانے ، ہوم سیکیورٹی سسٹم وغیرہ۔ اس ٹیوٹوریل میں ہم سیکھیں گے کہ کس طرح کرنا ہے۔ اوپن سی وی کا استعمال کرتے ہوئے تصویری قطعیت۔ ہم جو کاروائیاں کرنے جارہے ہیں وہ نیچے درج ہیں:
- تقسیم اور شکل
- درجہ بندی اور بازیافت موڈ
- شکلوں کا تخمینہ لگانا اور ان کا محرک ہل تلاش کرنا
- کونیکس ہل
- میچ کا مقابلہ
- شکلیں (حلقہ ، مستطیل ، مثلث ، مربع ، ستارہ) کی شناخت کرنا
- لائن کا پتہ لگانا
- بلاب کا پتہ لگانا
- حلقوں اور بیضوی شماریوں کی گنتی - بلب کو چھاننا
1. قطعہ اور شکل
تصویری قطعات ایک ایسا عمل ہے جس کے ذریعے ہم مختلف خطوں میں تصاویر تقسیم کرتے ہیں۔ جبکہ شکلیں وہ مستقل لائنیں یا منحنی خطوط ہیں جو کسی شبیہہ میں کسی شے کی پوری حد کو باندھتی ہیں یا اس کا احاطہ کرتی ہیں۔ اور ، یہاں ہم امیج سیگمنٹٹیشن تکنیک کا استعمال کریں گے جو کسی شبیہ کے پرزے نکالنے کے لئے شکلیں کہتے ہیں ۔
اس کے علاوہ شکلیں بہت اہم ہیں
- اعتراض کا پتہ لگانا
- شکل تجزیہ
اور ان کے پاس حقیقی دنیا کی تصویری تجزیہ سے لے کر میڈیکل امیج تجزیہ تک جیسے ایم آر آئی میں بہت زیادہ وسیع فیلڈ ہے
آئیے جانتے ہیں کہ اوپن سی وی میں شکلوں کو کیسے نافذ کیا جا، ، اسکوائروں کی شکلیں نکال کر۔
درآمد cv2 درآمد numpy NP طور
آئیے 3 سیاہ مربعوں کے ساتھ ایک عام تصویر لوڈ کریں
تصویر = cv2.imread ('squares.jpg') cv2.imshow ('ان پٹ امیج' ، شبیہ) cv2.waitKey (0)
گرے اسکیل
بھوری رنگ = cv2.cvt رنگ (تصویر ، cv2.COLOR_BGR2GRAY)
ڈبے کے کنارے تلاش کریں
کنارے = cv2. کینی (گرے ، 30،200) cv2.imshow ('کینڈی کنارے' ، کنارے) cv2.waitKey (0)
شکل تلاش کرنا
# اپنی شبیہہ کی ایک کاپی کا استعمال کریں ، جیسے - edged.copy () ، چونکہ شکلیں ڈھونڈنے سے تصویر کو تبدیل کرنا پڑتا ہے ، ہمیں اوپن سی وی ورژن _ ، شکل ، درجہ بندی = cv2 کے اپ گریڈ کی وجہ سے خالی دلیل کے طور پر شکل سے پہلے ، _ کو شامل کرنا ہے.فائنڈکونٹس (کنارے ، cv2.RETR_EXTERNAL ، cv2.CHAIN_APPROX_NONE) cv2.imshow ('کنٹورنگ کے بعد کینڈی کنارے' ، کنارے) cv2.waitKey (0)
کونٹور فائل پرنٹ کرنا یہ جاننے کے لئے کہ کنٹورس پر مشتمل ہے
پرنٹ (شکلیں) پرنٹ ('شکلیں ملا نمبر =' + str (لین (شکل)))
تمام شکلیں کھینچیں
# شکل -1 بطور تیسرا پیرامیٹر cv2.drawContours (تصویر ، شکلیں ، -1 ، (0،255،0) ، 3) cv2.imshow ('شکلیں' ، شبیہ) cv2.waitKey (0) cv2 بنائیں۔ آل اینڈ ونڈوز ()
کنسول آؤٹ پٹ -] ،
]،
]،
… ،
]،
]،
]] ،
dtype = int32)،
سرنی (]،
]،
]،
… ،
]،
]،
]] ، dtype = int32) ، سرنی (] ،
]،
]،
… ،
]،
]،
]] ، dtype = int32)]
ملاپ کی تعداد کی تعداد = 3. تو ہمیں مجموعی طور پر تین شکلیں ملی ہیں۔
اب ، مندرجہ بالا کوڈ میں ہم نے سموچ فائل کو استعمال کرکے بھی طباعت کی تھی ، یہ فائل بتاتی ہے کہ یہ کونسول کس طرح دکھائی دیتی ہے ، جیسا کہ اوپر کنسول آؤٹ پٹ میں چھپی ہوئی ہے۔
مندرجہ بالا کنسول آؤٹ پٹ میں ہمارے پاس میٹرکس ہے جو ایکس ، وائی پوائنٹس کے کوآرڈینیٹ کی طرح لگتا ہے۔ اوپن سی وی فہرستوں کی فہرست میں اسٹور کرتا ہے۔ ہم مندرجہ بالا کنسول آؤٹ پٹ کو آسانی سے دکھا سکتے ہیں۔
کونٹور 1 کونٹور 2 کنٹور 3
] ، سرنی (] ، سرنی (] ،
] ،] ،] ،
] ،] ،] ،
… ،… ،… ،
] ،] ،] ،
] ،] ،] ،
]] ، dtype = int32) ،]] ، dtype = int32) ،]] ، dtype = int32)]
اب ، جیسا کہ ہم سموچ فائل پر لمبائی کا استعمال کرتے ہیں ، ہمیں لمبائی 3 کے برابر مل جاتی ہے ، اس کا مطلب ہے کہ اس فائل میں فہرستوں کی تین فہرستیں تھیں ، یعنی تین شکلیں۔
اب ذرا تصور کریں کہ کونٹور 1 اس صف میں پہلا عنصر ہے اور اس فہرست میں تمام نقاط کی فہرست ہے اور یہ نقاط ہموض کے ساتھ ساتھ نکات ہیں جو ہم نے ابھی دیکھا ہے ، جیسے سبز مستطیل خانوں کی طرح۔
ان کوآرڈینیٹس کو ذخیرہ کرنے کے لئے مختلف طریقے موجود ہیں اور انھیں تخمینے کے طریقے کہا جاتا ہے ، بنیادی طور پر قریب قریب دو طرح کے طریقے ہوتے ہیں
- cv2.CHAIN_APPROX_NONE
- cv2.CHAIN_APPROX_SIMPLE
cv2.CHAIN_APPROX_NONE تمام باؤنڈری پوائنٹ کو اسٹور کرتا ہے ، لیکن ہمیں لازمی طور پر تمام با points نڈری پوائنٹ کی ضرورت نہیں ہے ، اگر پوائنٹ سیدھے لائن کی شکل اختیار کرتا ہے تو ہمیں اس لائن پر صرف نقطہ آغاز اور اختتامی نقطہ کی ضرورت ہوتی ہے۔
cv2.CHAIN_APPROX_SIMPLE اس کے بجائے صرف پابند راستہ کے آغاز اور اختتامی پوائنٹس فراہم کرتا ہے ، اس کا نتیجہ سموچ کی معلومات کا زیادہ موثر اسٹوریج ہوتا ہے۔
_ ، شکلیں ، درجہ بندی = cv2.findContours (یج ، cv2.RETR_EXTERNAL ، cv2.CHAIN_APPROX_NONE)
مذکورہ کوڈ میں cv2.RETR_EXTERNAL بازیافت کا موڈ ہے جبکہ cv2.CHAIN_APPROX_NONE ہے
قریب ہونے کا طریقہ۔
تو ہم نے شکل اور انداز قریب کے بارے میں سیکھا ہے ، اب آئیئے درجہ بندی اور بازیافت کے موڈ کو ڈھونڈیں۔
2. درجہ بندی اور بازیافت موڈ
بازیافت موڈ تقویم کی شکل کو ضمنی شکلوں ، یا بیرونی سموچ یا تمام شکلوں جیسے شکل میں بیان کرتا ہے۔
اب درجہ بندی کی اقسام کے مطابق ترتیب دینے میں چار طریقے ہیں۔
cv2.RETR_LIST - تمام شکلیں بازیافت کرتی ہیں۔
cv2.RETR_EXTERNAL - صرف بیرونی یا بیرونی شکلیں حاصل کرتی ہیں۔
cv2.RETR_CCOMP - سب کو 2 سطحی درجہ بندی میں بازیافت کرتا ہے۔
cv2.RETR_TREE - ایک مکمل درجہ بندی میں سب کو بازیافت کرتا ہے۔
درجہ بندی کو درج ذیل شکل میں محفوظ کیا جاتا ہے
آئیے پہلے دو بازیافت طریقوں ، cv2.RETR_LIST اور cv2.RETR_EXTERNAL کے مابین فرق کو واضح کریں۔
درآمد cv2 درآمد numpy NP طور
3 سیاہ چوکوں کے ساتھ ایک سادہ تصویر لوڈ کرنے دیتا ہے
شبیہ = cv2.imread ('مربع ڈونٹ.jpg') cv2.imshow ('ان پٹ امیج' ، شبیہ) cv2.waitKey (0)
گرے اسکیل
بھوری رنگ = cv2.cvt رنگ (تصویر ، cv2.COLOR_BGR2GRAY)
کینی ایجز تلاش کریں
کنارے = cv2. کینی (گرے ، 30،200) cv2.imshow ('کینڈی کنارے' ، کنارے) cv2.waitKey (0)
سفر کی تلاش
# اپنی شبیہہ کی ایک کاپی کا استعمال کریں ، جیسے - edged.copy () ، چونکہ شکلیں ڈھونڈنے سے تصویر کو تبدیل کرنا پڑتا ہے # ، ہمیں کھلا سی وی ورژن _ ، شکلیں ، درجہ بندی = کو اپ گریڈ کرنے کی وجہ سے خالی دلیل کے طور پر شکل سے پہلے ، _ شامل کرنا ہے۔ cv2.findContours (edged، cv2.RETR_EXTERNAL، cv2.CHAIN_APPROX_NONE) cv2.imshow ('کنٹورنگ کے بعد کینری کنارے'، کنارے) cv2.waitKey (0)
کونٹور فائل پرنٹ کرنا یہ جاننے کے لئے کہ کنٹورٹس پر مشتمل ہے۔
پرنٹ (شکلیں) پرنٹ ('شکلیں ملا نمبر =' + str (لین (شکل)))
تمام شکلیں کھینچیں
# شکل -1 بطور تیسرا پیرامیٹر cv2.drawContours (تصویر ، شکلیں ، -1 ، (0،255،0) ، 3) cv2.imshow ('شکلیں' ، شبیہ) cv2.waitKey (0) cv2 بنائیں۔ AllWindows کو ختم کریں
درآمد cv2 درآمد numpy NP طور
3 سیاہ چوکوں کے ساتھ ایک سادہ تصویر لوڈ کرنے دیتا ہے
شبیہ = cv2.imread ('مربع ڈونٹ.jpg') cv2.imshow ('ان پٹ امیج' ، شبیہ) cv2.waitKey (0)
گرے اسکیل
بھوری رنگ = cv2.cvt رنگ (تصویر ، cv2.COLOR_BGR2GRAY)
ڈبے کے کنارے تلاش کریں
کنارے = cv2. کینی (گرے ، 30،200) cv2.imshow ('کینڈی کنارے' ، کنارے) cv2.waitKey (0)
شکل تلاش کرنا
# اپنی شبیہہ کی ایک کاپی کا استعمال کریں ، جیسے - edged.copy () ، چونکہ شکلیں ڈھونڈنے سے تصویر کو تبدیل کرنا پڑتا ہے # ، ہمیں کھلا سی وی ورژن _ ، شکلیں ، درجہ بندی = کو اپ گریڈ کرنے کی وجہ سے خالی دلیل کے طور پر شکل سے پہلے ، _ شامل کرنا ہے۔ cv2.findContours (کنارا ، cv2.RETR_LIST ، cv2.CHAIN_APPROX_NONE) cv2.imshow ('کنٹورنگ کے بعد کینڑی کنارے' ، کنارے) cv2.waitKey (0)
کونٹور فائل پرنٹ کرنا یہ جاننے کے لئے کہ کنٹورس پر مشتمل ہے ۔
پرنٹ (شکلیں) پرنٹ ('شکلیں ملا نمبر =' + str (لین (شکل)))
تمام شکلیں کھینچیں
# شکل -1 بطور تیسرا پیرامیٹر cv2.drawContours (تصویر ، شکلیں ، -1 ، (0،255،0) ، 3) cv2.imshow ('شکلیں' ، شبیہ) cv2.waitKey (0) cv2 بنائیں۔ آل اینڈ ونڈوز ()
لہذا مذکورہ کوڈوں کے مظاہرے کے ذریعے ہم cv2.RETR_LIST اور cv2.RETR_EXTERNNAL کے درمیان واضح طور پر فرق دیکھ سکتے ہیں ، صرف بیرونی شکل کو ہی مدنظر رکھا جارہا ہے جبکہ اندرونی شکل کو نظرانداز کیا جارہا ہے۔
جبکہ cv2.RETR_LIST میں اندرونی شکلیں بھی مدنظر رکھی جارہی ہیں۔
Cont. شکلوں کا اندازہ لگانا اور ان کا محرک ہل تلاش کرنا
قریب کی شکل میں ، ایک سموچ کی شکل کسی دوسرے سموچ شکل کے قریب ہوتی ہے ، جو شاید پہلے سموچ کی شکل سے اتنی مماثل نہیں ہوسکتی ہے۔
قریب ہونے کے ل we ہم اوپن سی وی کی تقریبا P پولی ڈی ڈی پی فنکشن استعمال کرتے ہیں جس کی تفصیل ذیل میں دی گئی ہے
cv2.approxPolyDP (سموچ ، قریب کی درستگی ، بند)
پیرامیٹرز:
- سموچ - انفرادی سموچ ہے جس کی ہم تقریبا appro خواہش کرنا چاہتے ہیں۔
- قریب کی درستگی - قریب کی درستگی کا تعین کرنے میں اہم پیرامیٹر ، چھوٹی قیمت عین مطابق قریب ملتی ہے ، بڑی قدریں زیادہ عمومی معلومات فراہم کرتی ہیں۔ ایک اچھا انگوٹھے کا قاعدہ سموچ تناؤ کے 5٪ سے کم ہے۔
- بند - ایک بولین ویلیو جس میں بتایا گیا ہے کہ آیا متوقع سموچ کھلا یا بند ہوسکتا ہے۔
آئیے گھر کے کسی سادہ اعداد و شمار کی تخمینے کی کوشش کریں
درآمد numpy NP طور درآمدی cv2
تصویر لوڈ کریں اور ایک کاپی رکھیں
شبیہ = cv2.imread ('house.jpg') اوریج_یومیج = image.copy () cv2.imshow ('اصل تصویر' ، اوریج_یومیج) cv2.waitKey (0)
تصویر کو گرے اسکیل اور بائنریز بنائیں
بھوری رنگ = cv2.cvtColor (تصویر، cv2.COLOR_BGR2GRAY) ریٹائرڈ، تاڑنا = cv2.threshold (سرمئی، 127.255، cv2.THRESH_BINARY_INV)
شکلیں تلاش کریں
_ ، شکلیں ، درجہ بندی = cv2.findContours (تھرش کوپی () ، cv2.RETR_LIST ، cv2.CHAIN_APPROX_NONE)
ہر ایک سموچ کے ذریعے تبدیل کریں اور ان کے پابند مستطیل کا حساب لگائیں
شکلوں میں سی کے لئے: x ، y ، w ، h = cv2.boundingRect (c) cv2. करेگل (اورینج_میج ، (x ، y) ، (x + w ، y + h) ، (0،0،255) ، 2) cv2.imshow ('باؤنڈنگ ریکٹ'، اوریج_میج) cv2.waitKey (0)
ہر ایک سموچ کے ذریعے مشق کریں اور لگ بھگ سموچور کا حساب لگائیں
شکل میں سی کے لئے:
سموچاری کی پیمائش کی درستگی کے فیصد کے طور پر # حساب کتاب کی درستگی = 0.03 * cv2.arcLength (c، true ) تقریبا = cv2.approxPolyDP (c ، درستگی ، سچ) cv2.drawContours (شبیہ ، 0 ، (0،255،0) ، 2) cv2.imshow ('تقریبا poly PolDP' ، شبیہ) cv2.waitKey (0) cv2.destroyAllWindows ()
4. محدب ہل
محدب ہل بنیادی طور پر بیرونی کناروں کی ہے ، جس کی نمائندگی کسی اعداد و شمار پر لکیریں ڈرائنگ کرتی ہے۔
یہ سب سے چھوٹی کثیرالاضلاع ہوسکتی ہے جو شے کے گرد ہی فٹ ہوجاتی ہے۔
درآمد cv2 درآمد numpy بطور این پی امیج = cv2.imread ('star.jpg') سرمئی = cv2.cvt رنگ (تصویر ، cv2.COLOR_BGR2GRAY) cv2.imshow ('اصل تصویر' ، شبیہ) cv2.waitKey (0)
تصویر کی چوکھٹ
ریٹ ، تھرش = cv2.threshold (گرے ، 176،255،0)
شکل تلاش کریں
_ ، شکلیں ، درجہ بندی = cv2.findContours (تھرش کوپی () ، cv2.RETR_LIST ، cv2.CHAIN_APPROX_NONE)
شکل کے حساب سے ترتیب دیں اور پھر بڑے فریم سموچ کو ہٹا دیں
n = لین (شکلیں) -1 شکلیں = ترتیب شدہ (شکلیں ، کلید = cv2.contourArea ، الٹا = غلط)
شکلوں کے ذریعے Iterate اور محدب ہل
شکل میں سی کے لئے:
ہل = cv2.convexHull (c) cv2.drawContours (شبیہ ،، 0، (0،255،0)، 2) cv2.imshow ('محدب ہل'، تصویر) cv2.waitKey (0) cv2.destroyAllWindows ()
5. شکلوں کے ذریعہ سموچ کا مقابلہ کرنا
cv2.matchShapes (سموچ ٹیمپلیٹ ، سموچ طریقہ ، طریقہ پیرامیٹر)
آؤٹ پٹ - میچ ویلیو (کم قیمت کا مطلب قریب سے میچ ہوتا ہے)
سموچ ٹیمپلیٹ ۔ یہ ہمارا حوالہ سموچ ہے جسے ہم ایک نئی شبیہہ میں ڈھونڈنے کی کوشش کر رہے ہیں۔
سموچ - انفرادی سموچ جس کی ہم جانچ کررہے ہیں۔
طریقہ - سموچ سے ملنے کی قسم (1،2،3)
طریقہ پیرامیٹر - 0 کے طور پر تنہا چھوڑ دو (ازگر اوپنکیو میں استعمال نہیں ہوا)
درآمد cv2 درآمد numpy NP طور
شکل ٹیمپلیٹ یا حوالہ امیج لوڈ کریں
ٹیمپلیٹ = cv2.imread ('star.jpg'، 0) cv2.imshow ('سانچے' ، سانچے) cv2.waitKey (0)
ھدف کی شبیہہ ان اشکال کے ساتھ لوڈ کریں جس کی ہم مماثلت کرنے کی کوشش کر رہے ہیں
ہدف = cv2.imread ('shapestomatch.jpg') گرے = cv2.cvt رنگ (ہدف ، cv2.COLOR_BGR2GRAY)
cv2.findContours استعمال کرنے سے پہلے دونوں کی تصاویر کو تھریشولڈ کریں
ret، thresh1 = cv2.threshold (ٹیمپلیٹ ، 127،255،0) ریٹ ، thresh2 = cv2.threshold (گرے ، 127،255،0)
سانچے میں شکل تلاش کریں
_ ، شکلیں ، درجہ بندی ، cv2.findContours (thres1، cv2.RETR_CCOMP، cv2.CHAIN_APPROX_SIMPLE) # ہمیں رقبے کے لحاظ سے ترتیب کو ترتیب دینے کی ضرورت ہے تاکہ ہم سب سے بڑے سموچ کو ہٹا سکیں جو ہے
تصویری خاکہ
چھانٹیا_قائد = ترتیب شدہ (شکلیں ، کلید = cv2.contourArea ، ریورس = ٹرچ ) # ہم دوسرا سب سے بڑا سموچ نکالیں گے جو ہمارا ٹیمپلیٹ سمٹالٹ_کونٹور = شکلیں ہوگا_دوسرے ہدف کی تصویر _ ، شکلیں ، درجہ بندی = cv2.findContours (thresh2، cv2.RETR_CCOMP، cv2.CHAIN_APPROX_SIMPLE) شکلوں میں سی کے لئے: نشانے کی تصویر میں ہر ایک سموچ کے ذریعے بھرے ہوئے اور سموچ کی شکل کا موازنہ کرنے کے لئے cv2.matchShape کا استعمال کریں = cv2.matchShapes (tempelate_contour، c، 1،0.0) پرنٹ ("میچ") # اگر میچ <0.16: قریب_کونٹ = c اور: قریب_کونٹ = cv2.drawContours (ہدف ، - 1 ، (0،255،0) ، 3) cv2.imshow ('آؤٹ پٹ') # میچ کی قیمت 0.15 سے کم ہے ، نشانہ) cv2.waitKey (0) cv2.destroyAllWindows ()
کنسول آؤٹ پٹ -
0.16818605122199104
0.19946910256158912
0.18949760627309664
0.11101058276281539
ریاضی کے مختلف فنکشن کے ساتھ تین مختلف طریقہ کار ہیں ، ہم صرف cv2.matchShapes (tempelate_contour، c، 1 ، 0.0) میتھڈ ویلیوز کی جگہ لے کر ہر ایک طریقہ کار کے ساتھ تجربہ کرسکتے ہیں جو 1،2 اور 3 سے مختلف ہوتی ہیں ، ہر ایک ویلیو کے لئے آپ کو مختلف میچ ملیں گے۔ کنسول آؤٹ پٹ میں اقدار۔
6. شکلوں کی شناخت (دائرہ ، مستطیل ، مثلث ، مربع ، ستارہ)
اوپن سی وی کو شبیہہ سے خود بخود مختلف قسم کی شکلوں کا پتہ لگانے کے لئے بھی استعمال کیا جاسکتا ہے۔ ذیل میں کوڈ استعمال کرکے ہم تصویر سے دائرہ ، مستطیل ، مثلث ، مربع اور ستارے تلاش کرسکیں گے۔
درآمد cv2 درآمد numpy NP طور
لوڈ کریں اور پھر سرمئی پیمانے پر تصاویر
تصویر = cv2.imread ('shapes.jpg') گرے = cv2.cvtColor (تصویر، cv2.COLOR_BGR2GRAY) cv2.imshow ('شکلیں کی شناخت'، تصویر) cv2.waitKey (0) ریٹائرڈ، تاڑنا = cv2.threshold (سرمئی ، 127،255،1)
شکلیں نکالیں
_ ، شکلیں ، درجہ بندی = cv2.findContours (تھرش کوپی () ، cv2.RETR_LIST ، cv2.CHAIN_APPROX_NONE)
شکل میں cnt کے لئے:
اندازا کثیر الاضلاع حاصل تقریبا = cv2.approxPolyDP (CNT، 0.01 * cv2.arcLength (CNT، یہ سچ ہے)، یہ سچ ہے کہ) لین تو (تقریبا) == 3: shape_name "مثلث" = cv2.drawContours (تصویر، 0، (0،255، 0) ، - 1)
مرکز میں متن رکھنے کے لئے سموچ سینٹر تلاش کریں
M = cv2.moments (cnt) cx = int (M / M) cy = int (M / M) cv2.putText (تصویری شکل ، نام ، (cx-50 ، cy) ، cv2.FONT_HERSHEY_SIMPLEX ، 1 ، (0،0 ، 0) ، 1) ایلیف لین (تقریبا) == 4: x، y، w، h = cv2.boundingRect (cnt) M = cv2.moments (cnt) cx = انٹ (M / M) cy = int (M) / ایم)
یہ دیکھنے کے ل Check چیک کریں کہ یہ چار رخا کثیرالاضاع مربع ہے یا مستطیل
# cv2.bounding ریکٹ بائیں چوڑائی اور اونچائی کو پکسلز میں لوٹتا ہے ، اوپر # بائیں کونے سے شروع ہوتا ہے ، مربع کے ل it یہ تقریبا ایک جیسے ہوگا اگر ایف بی (و) <= 3: form_name = "مربع" # فائنڈ سموچ سینٹر پر متن رکھنے کیلئے سینٹر cv2.drawContours (تصویری ،، 0، (0،125،255)، - 1) cv2.putText (شبیہہ، شکل کا نام، (cx-50، cy)، cv2.FONT_HERSHEY_SIMPLEX، 1، (0،0،0)، 1) اور: form_name = "ری ایکٹیکل" # فائنڈ سموچ سینٹر ٹیکسٹ کو مرکز میں رکھنے کے لئے cv2.drawContours (شبیہ ،، 0، (0،0،255)، - 1) M = cv2.moments (cnt) cx = int (M / M) cy = INT (M / M) cv2.putText (شبیہہ ، شکل کا نام ، (cx-50 ، cy) ، cv2.FONT_HERSHEY_SIMPLEX ، 1 ، (0،0،0) ، 1) ایلیف لین (تقریبا) == 10: شکل_ نام = 'ستارہ' cv2.drawContours (شبیہ ،، 0، (255،255،0)، - 1) M = cv2.moments (cnt) cx = int (M / M) cy = انٹ (M / M) cv2.putText (شبیہہ ، شکل_ نام ، (cx-50، cy)، cv2.FONT_HERSHEY_SIMPLEX، 1، (0،0،0)، 1) ایلیف لین ( لگ بھگ )> = 15: شکل_ نام = 'حلقہ' cv2.drawContours (تصویر، 0، (0،255،255) ، -1) M = cv2.moments (cnt) cx = int (M / M) cy = int (M / M) cv2.putText (شبیہہ ، شکل_نم ، (cx-50 ، cy) ، cv2.FONT_HERSHEY_SIMPLEX ، 1 ، (0،0،0) ، 1) cv2.imshow ('شکلیں شناخت کرنا' ، تصویر) cv2.waitKey (0) cv2.destroyAllWindows ()
7. لائن کی کھوج
اوپن سی وی میں لائن کا پتہ لگانا بہت اہم تصور ہے ، اور حقیقی دنیا میں اس کا امید افزا استعمال ہے۔ گلیوں اور سڑکوں کی نشاندہی کے لئے خود مختار کاریں لائن کا پتہ لگانے کے الگورتھم استعمال کرتی ہیں۔
لائن کا پتہ لگانے میں ہم دو الگورتھموں سے نمٹیں گے ،
- ہف لائن الگورتھم
- پرابلمسٹک ہف لائن الگورتھم ۔
آپ کو مساوات کے ساتھ ہائی اسکول کے ریاضی کی لکیر کی نمائندگی یاد ہو گی ، y = mx + c.
تاہم ، اوپن سی وی لائن میں کسی اور طرح سے نمائندگی کی جاتی ہے
مساوات ρ = xcosӨ + ysincosӨ لائن کی اوپن سی وی نمائندگی ہے ، جس میں origin اصل کی طرف سے لکیر کا لمبائی فاصلہ ہے اور Ө اس لائن کی معمول سے اصلیت تک بننے والا زاویہ ہے (ریڈینز میں ماپا جاتا ہے ، جس میں 1pi ریڈینز / 180 = 1 ڈگری)۔
لائن کا پتہ لگانے کے لئے اوپن سی وی فنکشن کے طور پر دیا گیا ہے
cv2.HoughLines (بائنریزڈ امیج ، ura درستگی ، ura درستگی ، حد) ، جس میں حد کو کم از کم ووٹ کے طور پر لکیر سمجھا جائے۔
آئیے اوپن سی وی کے ہف لائن فنکشن کی مدد سے ایک باکس امیج کے لئے لائنوں کا پتہ لگائیں۔
درآمد cv2 درآمد numpy بطور این پی امیج = cv2.imread ('box.jpg')
گرے اسکیل اور کینڈی کناروں کو نکالا گیا
بھوری رنگ = cv2.cvt ਰੰਗ رنگ (تصویر ، cv2.COLOR_BGR2GRAY) کناروں = cv2. کینی (گرے ، 100،170 ، یپرچر سائز = 3)
1 پکسل کی rho درستگی کا استعمال کرتے ہوئے سخت لائنیں چلائیں
#theta کی درستگی (np.pi / 180) جو 1 ڈگری # لائن حد ہے 240 (لائن پر پوائنٹس کی تعداد) لائنوں = cv2.HoughLines (کناروں ، 1 ، np.pi / 180 ، 240) # ہم دوبارہ ہر لائن کے ذریعے اور cv2.lines (یعنی اختتامی پوائنٹس کی ضرورت ہوتی ہے) کی حد میں میں (0 ، لین (لائنز)) کے ذریعہ # فارمیٹ میں تبدیل : rho کے لئے ، لائنوں میں تھیٹا: a = np.cos (theta) b = np.sin (theta) x0 = a * rho y0 = b * rho x1 = int (x0 + 1000 * (- b)) y1 = int (y0 + 1000 * (a)) x2 = انٹ (x0-1000 * (-b)) y2 = INT (y0-1000 * (a)) cv2.line (شبیہ ، (x1 ، y1) ، (x2 ، y2) ، (0،255،0) ، 2) cv2.imshow ('houghlines' ، تصویر) cv2.waitKey (0) cv2.destroyAllWindows ()
اب ہم احتمالی ہف لائن کے دوسرے الگورتھم کے ساتھ لائن کا پتہ لگانے کے اوپر دہرائیں۔
احتمالی ہائف لائن کے پیچھے خیال یہ ہے کہ لائن کا پتہ لگانے کے لئے کافی پوائنٹس کا بے ترتیب سبسیٹ لیا جائے۔
احتمالی ہائف لائن کے لئے اوپن سی وی فنکشن کی نمائندگی سی وی 2 کے طور پر کی گئی ہے۔ ہاٹ لائنز پی (بائنارائزڈ امیج ، ura درستگی ، ura درستگی ، حد ، کم سے کم لائن لمبائی ، زیادہ سے زیادہ لائن گپ)
اب ہم امکانی ہائف لائنوں کی مدد سے باکس لائنوں کا پتہ لگائیں۔
درآمد cv2 درآمد numpy NP طور
گرے اسکیل اور کینڈی کناروں کو نکالا گیا
image = cv2.imread ('box.jpg') سرمئی = cv2.cvt Color (تصویری ، cv2.COLOR_BGR2GRAY) کنارے = cv2.Canny (سرمئی ، 50،150 ، یپرچرسیز = 3) # ہم اسی rho اور تھیٹا کی درستگی کا استعمال کرتے ہیں # پھر بھی ، ہم 100 # اور منٹ کی لمبائی 5 پکسلز کی لمبائی اور 10 پکسلز لائنوں = cv2.HoughLinesP (کناروں ، 1 ، np.pi / 180،100،100،10) کی لائنوں کے درمیان زیادہ سے زیادہ فرق (کم از کم ووٹ (لائن کے ساتھ لائن) بھی بیان کرتے ہیں۔ حد میں (0 ، لین (لائنیں)): x1 ، y1 ، x2 ، y2 لائنوں میں: cv2.line (تصویر ، (x1 ، y1) ، (x2 ، y2) ، (0،255،0) ، 3) cv2۔ imshow ('probleistic houghlines'، تصویر) cv2.waitKey (0) cv2.destroyAllWindows
8. بلاب کا پتہ لگانا
بلابس کو مربوط پکسلز کے ایک گروپ کے طور پر بیان کیا جاسکتا ہے جو سب ایک مشترکہ خاصیت میں شریک ہیں۔ اس فلو چارٹ کے ذریعے اوپن سی وی بلاب ڈٹیکٹر کو استعمال کرنے کا طریقہ بیان کیا گیا ہے۔
کلیدی نکات ڈرائنگ کے لئے ہم cv2.drawKeypPoint استعمال کرتے ہیں جس میں مندرجہ ذیل دلائل لیتے ہیں۔
cv2.draw کیائپ پوائنٹس (ان پٹ امیج ، کلیدی پوائنٹس ، خالی_ آؤٹ پٹ_ریری ، رنگ ، جھنڈے)
جھنڈوں میں ہو سکتا ہے جہاں
cv2.DRAW_MATCHES_FLAGS_DEFAULT
cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS
cv2.DRAW_MATCHES_FLAGS_DRAW_OVER_OUTIMG
cv2.DRAW_MATCHES_FLAGS_NOT_DRAW_SINGLE_POINTS
اور یہاں خالی نہیں بلکہ ایک ایک میٹرکس کے زیرو کے سوا کچھ نہیں
آئیے سورج مکھیوں کی شبیہہ پر بلاب کا پتہ لگائیں ، جہاں پھول پھول کے مرکزی حصے ہوں گے کیونکہ وہ تمام پھولوں میں عام ہیں۔
درآمد cv2 درآمد نپٹی بطور این پی امیج = cv2.imread ('سن فلاورز۔ جے پی جی' ، cv2.IMREAD_GRAYSCALE)
پہلے سے طے شدہ پیرامیٹرز کے ساتھ ڈٹیکٹر مرتب کریں
پتہ لگانے والا = cv2.SimleBlobDtetector_create ()
بلابس کا پتہ لگائیں
کییپوائنٹس = ڈٹیکٹر۔ ڈیٹیکٹ (شبیہ)
سرخ حلقوں کی حیثیت سے پتہ چلنے والے بلابز کو ڈرا کریں
# cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS یہ یقینی بناتا ہے کہ دائرہ کا سائز بلب خالی کے سائز سے ملتا ہے = np.zeros ((1،1)) بلب = cv2.draw کلیپائینٹس (شبیہ، اہم اشارہ، خالی، 0،255،2GCFF، CSV، CS550 سیکرا)
اہم نکات دکھائیں
cv2.imshow ('blobs'، blobs) cv2.waitKey (0) cv2.destroyAllWindows ()
اگرچہ کوڈ ٹھیک کام کرتا ہے لیکن پھولوں کے متعدد سائز کی وجہ سے کچھ بلاب چھوٹ جاتے ہیں کیونکہ آخر میں پھولوں کے مقابلہ میں سامنے والے پھول بڑے ہوتے ہیں۔
9. بلب کو فلٹر کرنا - حلقوں اور بیضوی گنتی کرنا
ہم ان بلبس کو ان کی شکل ، سائز اور رنگ کے مطابق فلٹر کرنے کے لئے پیرامیٹرز استعمال کرسکتے ہیں۔ بلاب ڈٹیکٹر والے پیرامیٹرز کے استعمال کے ل we ہم اوپن سی وی کی تقریب کا استعمال کرتے ہیں
cv2.SimleBlobDtetector_Params ()
ہم ذیل میں درج چاروں پیرامیٹرز کے ذریعہ بلاب کو فلٹر کرتے دیکھیں گے۔
رقبہ
params.filterByArea = سچ / جھوٹے params.minArea = پکسلز params.maxArea = پکسلز
سرکلرٹی
params.filterByCircularity = سچ / جھوٹے params.minCircularity = 1 کامل ، 0 مخالف
محرک - بلاب کا علاقہ / محرک ہل کا رقبہ
params.filterByConvexity = سچ / جھوٹے params.minConvexity = ایریا
جڑتا
params.filterByInertia = سچ / جھوٹے params.minInertiaRatio = 0.01
اب مذکورہ بالا پیرامیٹرز کے ذریعہ بلاب کو فلٹر کرنے کی کوشش کریں
درآمد cv2 درآمد نپٹی بطور این پی امیج = cv2.imread ('blobs.jpg') cv2.imshow ('اصل تصویر' ، شبیہ) cv2.waitKey (0)
ڈیفالٹ پیرامیٹرز کا استعمال کرکے ڈیٹیکٹر کو شروع کریں
پتہ لگانے والا = cv2.SimleBlobDtetector_create ()
بلابس کا پتہ لگائیں
کییپوائنٹس = ڈٹیکٹر۔ ڈیٹیکٹ (شبیہ)
سرخ رنگ کے دائرے کی طرح ہماری شبیہہ پر بلبز ڈراو
خالی = np.zeros ((1،1)) بلوز = cv2. ڈرا کیکی پوائنٹس (شبیہ ، کیپپوائنٹس ، خالی ، (0،0،255) ، cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS ) متن + کل + پوائنٹس = (لین (کیپائنٹس)) سی وی 2 ڈاٹ پیٹ ٹیکسٹ (بلبس ، ٹیکسٹ ، (20،550) ، سی وی 2.FONT_HERSHEY_SIMPLEX ، 1 ، (100،0،255) ، 2)
بلاب کیپوائنٹس کے ساتھ تصویر دکھائیں
cv2.imshow ('طے شدہ پیرامیٹرز کا استعمال کرتے ہوئے بلاب' ، بلاب) cv2.waitKey (0)
ہمارے فلٹرنگ پیرامیٹرز طے کریں
cv2 کا استعمال کرتے ہوئے پیرامیٹر کی ترتیب کو دوبارہ بنائیں ۔سمپل بلوٹ ڈیٹیکٹر پیرامس = cv2.SimleBlobDtetector_Params ()
ایریا کو فلٹر کرنے کے پیرامیٹرز مرتب کریں
params.filterByArea = سچے params.minArea = 100
چکر لگانے والے فلٹرنگ پیرامیٹرز طے کریں
params.filterByCircularity = ٹروم پیرا میٹرز۔مین سرکلرٹی = 0.9
محرک فلٹرنگ پیرامیٹر مرتب کریں
params.filterByConvexity = جھوٹے پیرامس.minConvexity = 0.2
جڑتا فلٹرنگ پیرامیٹر سیٹ کریں
params.filterByInertia = سچے params.minInertiaRatio = 0.01
پیرامیٹر کی مدد سے ڈیٹیکٹر بنائیں
ڈٹیکٹر = cv2.SimleBlobDtetector_create (پیرامز)
بلابس کا پتہ لگائیں
کییپوائنٹس = ڈٹیکٹر۔ ڈیٹیکٹ (شبیہ)
سرخ حلقوں کے بطور امیجز پر بلابز ڈراو
خالی = np.zeros ((1،1)) بلوز = cv2. ڈرا کیکی پوائنٹس (شبیہ ، کیپ پوائنٹس ، خالی ، (0،255،0) ، cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS ) متن (کل + پوائنٹس) سرکل + str (لین (کلیدی نقطہ)) cv2.putText (بلبس ، متن ، (20،550) ، cv2.FONT_HERSHEY_SIMPLEX ، 1 ، (0،100،255) ، 2)
بلاب دکھائیں
cv2.imshow ('فلٹرنگ سرکلر بلب' ، بلب) cv2.waitKey (0) cv2.destroyAllWindows ()
لہذا اس طرح ازگر - اوپن سی وی میں تصویری قطعہ بندی کی جاسکتی ہے۔ کمپیوٹر وژن اور اوپن سی وی کو اچھی طرح سے سمجھنے کے ل previous ، پچھلے مضامین کو دیکھیں (ازگر اوپن سی وی میں ازگر اوپن سی وی اور تصویری جوڑتوڑ کے ساتھ شروعات کریں اور آپ کمپیوٹر وژن کے ذریعہ کچھ عمدہ بنا سکیں گے۔