- 1. بٹ وائی آپریشنز اور ماسکنگ
- 2. کنویوشن اور دھندلاپن
- 3. تیز - تصویر دھندلاپن
- 4. تھرسٹنگ (بائنرائزیشن)
- 5. بازی ، کٹاؤ ، کھلنا / بند ہونا
- 6. ایج کا پتہ لگانے اور تصویری تدریج
- 14. نقطہ نظر اور affine ٹرانسفارم
- 8. براہ راست خاکہ کی درخواست
پچھلے سبق میں ، ہم نے اوپن سی وی کے بارے میں سیکھا ہے اور کچھ بنیادی تصویری پروسیسنگ کی ہے اور پھر اگلے ٹیوٹوریل میں ہم نے اوپن سی وی میں کچھ تصویری ہیرا پھیری کی ہے جیسے کھیتی ، گردش ، تصویری تبدیلی وغیرہ۔ تو پچھلے تصویری ہیرا پھیری کے سبق کے ساتھ ، ہم یہاں سیکھتے ہیں کچھ اور تصویری ہیرا پھیری کی تکنیک جیسے اور سبق کے آخر میں ہم ویب کیم لائیو فیڈ سے براہ راست خاکہ بنانے کے لئے ایک ازگر - اوپنکیو پروگرام بنائیں گے۔ اس ایپلیکیشن میں امیج پروسیسنگ کے بہت سے فنکشن استعمال ہوں گے جو ہم نے ابھی تک سیکھے ہیں یا اس ٹیوٹوریل میں سیکھیں گے ، لہذا تمام افعال کو کور کرنے کے لئے یہ ایک عمدہ عملی مثال ہوگی۔
جیسا کہ پچھلے سبق میں بتایا گیا ہے ، اوپن سی وی اوپن سورس کامور وژن لائبریری ہے جس میں C ++ ، ازگر اور جاوا انٹرفیس ہیں اور وہ ونڈوز ، لینکس ، میک او ایس ، آئی او ایس اور اینڈروئیڈ کو سپورٹ کرتا ہے۔ لہذا یہ راسبیری پائی میں ازگر اور لینکس ماحول کے ساتھ آسانی سے انسٹال کیا جاسکتا ہے۔ اور اوپن سی وی اور منسلک کیمرہ کے ساتھ رسبری پائی کا استعمال بہت سے ریئل ٹائم امیج پراسیسنگ ایپلی کیشنز بنانے کے لئے کیا جاسکتا ہے جیسے چہرہ کا پتہ لگانا ، چہرہ لاک ، آبجیکٹ سے باخبر رہنے ، کار کی نمبر پلیٹ کا پتہ لگانا ، ہوم سیکیورٹی سسٹم وغیرہ۔
اس ٹیوٹوریل میں ، ہم ازگر اوپن سی وی کا استعمال کرتے ہوئے کچھ اور تصویری جوڑتوڑیاں دیکھنے جارہے ہیں ۔ یہاں ہم পাইتھن اوپن سی وی کا استعمال کرتے ہوئے کسی تصویر پر مندرجہ ذیل فنکشن کا اطلاق کرنا سیکھیں گے:
- بٹ ویز آپریشنز اور ماسکنگ
- کنولیوشن اور دھندلاپن
- تیز کرنا - شبیہہ کو بلور کرنا
- تھریشولڈنگ (بائنرائزیشن)
- بازی ، کٹاؤ ، کھلنا / بند ہونا
- ایج کا پتہ لگانے اور تصویری تدریج
- نقطہ نظر اور affine کی تبدیلی
- براہ راست خاکہ کی درخواست
1. بٹ وائی آپریشنز اور ماسکنگ
بٹ وائی آپریشنز تصویری نقاب پوشی میں آپ کی مدد کرتا ہے اور کچھ آسان تصاویر بنانے میں آپ کی مدد کرتا ہے۔
مربع بنانا
درآمد cv2 درآمد نپپی این پی کے طور پر # ہم صرف دو جہتوں کا استعمال کرتے ہیں کیونکہ یہ گرے اسکیل امیج ہے ، اگر ہم # رنگین امیج استعمال کررہے تھے تو ہم نے پھر مستطیل = np.zeros ((300،300،3) ، np.uint8) استعمال کیا تھا # مربع مربع بنانا = np.zeros ((300،300)، np.uint8) cv2.rectangle (مربع، (50،50)، (250،250)، 255، -1) cv2.imshow ("مربع"، مربع) cv2۔ انتظارکی (0)
بیضوی کرنا
بیضوی = np.zeros ((300،300)، np.uint8) cv2.ellipse (بیضوی ، (150،150)، (150،150)، 30،0،180،255، -1) cv2.imshow ("بیضوی"، بیضوی) cv2.waitKey (0)
بٹ سائڈ آپریشنز کے ساتھ تجربہ کرنا
#AND_ صرف وہیں دکھاتا ہے جہاں دونوں آپس میں ملتے ہیں
BitwiseAND = cv2.bitwise_and (مربع ، بیضوی شکل) cv2.imshow ("AND"، BitwiseAND) cv2.waitKey (0)
# یا_شور صرف وہیں جہاں مربع یا بیضوی شکل ہے
BitwiseOR = cv2.bitwise_or (مربع ، بیضوی شکل) cv2.imshow ("OR"، BitwiseOR) cv2.waitKey (0)
# XOR_ شوز صرف جہاں خود یا تو موجود ہیں
BitwiseXOR = cv2.bitwise_xor (مربع ، بیضوی شکل) cv2.imshow ("XOR"، BitwiseXOR) cv2.waitKey (0)
#NOT_ ہر وہ چیز دکھاتا ہے جو بیضوی عمل کا حصہ نہیں ہے اور نہ کہ عمل صرف ایک ایک شخصیت پر لاگو ہوسکتا ہے
BitwiseNOT_elp = cv2.bitwise_not (ellipse) cv2.imshow ("NOT_ellipse"، BitwiseNOT_elp) cv2.waitKey (0) cv2.destroyAllWindows ()
2. کنویوشن اور دھندلاپن
ایک کنجوسشن ایک ریاضی کی کارروائی ہے جس کو دو فنکشنز پر انجام دیا جاتا ہے جو تیسرا فنکشن تیار کرتا ہے جو عام طور پر اصل فنکشن کا ایک ترمیم شدہ ورژن ہوتا ہے۔
آؤٹ پٹ امیج = تصویری فنکشن دانا کا سائز
میں کمپیوٹر وژن ہم استعمال دانا سائز ہے جس پر ہم نے اپنے تصویر کے اوپر ہماری توڑ تقریب چلانے کی وضاحت کرنے ہے.
دھندلا پن ایک ایسا عمل ہے جہاں ہم ایک خطے کے اندر پکسلز کی اوسط بناتے ہیں (دانا)
اوپن سی وی دانیوں کو لاگو کرکے ایک شبیہہ کو دھندلا دیتا ہے ، ایک دانا آپ کو بتاتا ہے کہ کسی بھی پکسل کی قیمت کو مختلف پڑوسی پکسلز کے ساتھ جوڑ کر ، تصویر کے ہر پکسل پر ایک ایک کرکے آخری تصویر تیار کرنے کے لئے دانا بھی لاگو ہوتا ہے۔
سیدھے الفاظ میں ، ایک تصویری کنجوسیشن محض عنصر کے لحاظ سے دو میٹرکس کی ضرب ہے جس کے بعد ایک رقم مل جاتی ہے۔
ہم اسے مندرجہ ذیل مثال کے ذریعہ آسانی سے سمجھ سکتے ہیں۔
مندرجہ بالا ایک 3X3 دانا ہے۔
ہم معمول کے ل 1/ 1/25 سے ضرب لگاتے ہیں یعنی 1 کی جو تعداد ہم اس میں شدت بڑھاتے رہے ہیں یا شدت کو کم کرتے ہیں جیسا کہ تصویروں کو چمکانے یا سیاہ کرنے کی صورت میں ہے۔
آئیے سی وی 2.فلٹر 2 ڈی فنکشن (تصویر ، -1 ، دانا) کے ذریعہ دیئے گئے ایک اوپنکیو دھندلاپن کے طریقہ کار فلٹر 2 ڈی کی جانچ کرتے ہیں۔
درآمد cv2 درآمد numpy بطور این پی امیج = cv2.imread (' ہاتھی.جی پی جی ') cv2.imshow ('اصل' ، شبیہ) cv2.waitKey (0)
3x3 کرنل میٹرکس بنا رہا ہے
kernel_3x3 = np.ones ((3،3)، np.float32) / 9
# ہم تصویر کے ساتھ دانا کو قائل کرنے کیلئے cv2.filter2D استعمال کرتے ہیں
دھندلا ہوا = cv2.filter2D (شبیہہ ، -1 ، کیرنل ایکس ایکس 3) cv2.imshow ('3x3_blurring' ، دھندلاپن) cv2.waitKey (0)
7x7 کرنل میٹرکس تیار کرنا
kernel_7x7 = np.ones ((7،7)، np.float32) / 49
# ہم تصویر کے ساتھ دانا کو قائل کرنے کیلئے cv2.filter2D استعمال کرتے ہیں
دھندلا ہوا = cv2.filter2D (تصویری ، -1 ، دانا_7x7) cv2.imshow ('7x7_blurring' ، دھندلاپن) cv2.waitKey (0) cv2.destroyAllWindows ()
موجود ہیں طریقوں دھندلاہٹ کی دوسری اقسام بھی:
cv2.blur - ایک مخصوص ونڈو کے اوپر اوسط کی قیمت.
cv2.aaausBlur - اسی طرح کی لیکن ایک گاوشی کھڑکی (مرکز کے آس پاس کے مقامات پر زیادہ زور) کا استعمال کرتا ہے۔
cv2.medianBlur– ونڈو میں تمام عناصر کا میڈین استعمال کرتا ہے۔
cv2.bटकाFilter– دھندلی کناروں کو تیز رکھتے ہوئے ، یہ کناروں اور لائن کی تفصیلات کو محفوظ رکھتی ہے۔
ہم نیچے ایک ایک کرکے دیکھیں گے ، پہلے نیچے کوڈ کا استعمال کرتے ہوئے اصل تصویر دکھائیں:
درآمد cv2 درآمد numpy بطور این پی امیج = cv2.imread (' ہاتھی.جی پی جی ') cv2.imshow ('اصل' ، شبیہ) cv2.waitKey (0)
cv2.blur:
اس طریقہ کار میں اوسطا عام طور پر باکس فلٹر کے ذریعہ شبیہہ کو قائل کرکے کیا جاتا ہے ، یہ باکس کے نیچے جگہ لیتا ہے اور مرکزی عنصر کی جگہ لیتا ہے۔ یہاں باکس کا سائز عجیب اور مثبت ہونا ضروری ہے ۔
# cv2.blur کلنک = cv2.blur (شبیہہ (3،3 ٪ ) cv2.imshow ('اوسط'، کلنک) cv2.waitKey (0)
cv2. گاوسین بلور:
# cv2.aausBlur # خانہ فلٹر کے مستحکم ، آئیے گاوسین دانا گاؤسی = cv2.ausaBlur (شبیہ ، (7،7) ، 0) cv2.imshow ('گاوشی دھندلاپن' ، گاوسی) cv2.waitKey (0)
cv2.median بلور:
اس میں دانے کے علاقے کے تحت تمام پکسلز کی اوسط لی جاتی ہے اور وسطی عنصر کو اس میڈین ویلیو سے تبدیل کردیا جاتا ہے۔
# cv2.medianBlur # دانے کے علاقے اور مرکزی عنصر کے تحت تمام پکسلز کا وسط لے جاتا ہے # اس میں اس قدر کی جگہ لائی جاتی ہے ۔ میڈین = cv2.medianBlur (تصویر، 5) cv2.imshow ('میڈین دھندلاہٹ'، میڈین) cv2.waitKey (0)
cv2.bटका فلٹر:
کناروں کو تیز رکھتے ہوئے شور مٹانے میں دو طرفہ بہت موثر ہے
# cv2.bटका Filter # دو طرفہ شور کو دور کرنے میں بہت کارآمد ہے جبکہ کناروں کو تیز رکھتے ہوئے دو طرفہ = cv2.bटकाFilter (شبیہہ ، 9،75،75) cv2.imshow ('دو طرفہ دھندلاپن' ، دو طرفہ) cv2.waitKey (0) cv2۔ آل اینڈ ونڈوز ()
شبیہہ شور مچانے والے غیر مقامی کا مطلب بداخلاق ہے
درآمد cv2 درآمد نپسی بطور این پی امیج = cv2.imread (' ہاتھی.جی پی جی ') cv2.imshow ('اصل' ، تصویر) cv2.waitKey (0)
کوئی بھی نہیں کے بعد #parameter فلٹر طاقت 'ک' (5-10 ایک اچھا سلسلہ ہے) ہے #next رنگ اجزاء کے لئے H ہے، کے طور پر مقرر اسی دوبارہ H کے طور پر قدر
ڈی ایس ٹی = cv2.fastNlMeansDenoising رنگ (تصویر ، کوئی نہیں ، 6،6،7،21) cv2.imshow ('فاسٹ کا مطلب ہے denois'، dst ) cv2.waitKey (0) cv2.destroyAllWindows ()
غیر مقامی ذرائع سے ظاہر کرنے کی 4 مختلف حالتیں ہیں
cv2.fastNlMeansDenoising () - ایک گرے سکیل امیج کے لئے
cv2.fastNlMeansDenoising رنگ () - ایک رنگین شبیہہ
cv2.fastNlmeansDenoisingM Multi () - تصویری تسلسل گرے اسکیل کے لئے
cv2.fastNlmeansDenoisingcolored ملٹی () - تصویری ترتیب رنگ کے لئے
3. تیز - تصویر دھندلاپن
تیز کرنا دھندلاپن کے برعکس ہے ، یہ شبیہہ کے کناروں پر طاقت یا زور دیتا ہے۔
دانا = ، ،
ہمارا دانا میٹرکس ایک کے برابر ہے ، لہذا اس کو معمول پر لانے کی ضرورت نہیں ہے (یعنی اصلی جیسے چمک کے عنصر سے ضرب) ، اگر دانا 1 کو معمول پر نہیں لیا گیا تو تصویر روشن اور تاریک ہوگی۔
درآمد cv2 درآمد numpy بطور این پی امیج = cv2.imread (' ہاتھی.جی پی جی ') cv2.imshow ('اصل' ، شبیہ) cv2.waitKey (0)
kernel_sharpening = np.array (،
،
])
# ان پٹ امیج کو تیز کرنے کے دانا کو اپلائی کرنا
شارپینڈ = cv2.filter2D (تصویری ، -1 ، دانا_شھارپیننگ) cv2.imshow ('تیز تصویر' ، تیز) cv2.waitKey (0) cv2.destroyAllWindows ()
4. تھرسٹنگ (بائنرائزیشن)
تھریشولڈنگ کسی تصویر کو بائنری شکل میں تبدیل کرنا ہے۔ اوپن سی وی میں تھریشولڈنگ کے لئے الگ الگ فنکشن ہے جس کی وضاحت کی گئی ہے
Cv2.threshold (تصویر ، حد کی قیمت ، زیادہ سے زیادہ قیمت ، حد کی قسم)
درج ذیل حد اقسام ہیں:
- cv2.THRESH_BINARY - سب سے عام
- cv2۔ THRESH_BINARY_INV - سب سے عام
- cv2.THRESH_TRUNC
- cv2.THRESH_TOZERO
- cv2۔ THRESH_TOZERO_INV
نوٹ: چھت لگانے سے پہلے تصویر کو گرے اسکیل میں تبدیل کرنے کی ضرورت ہے
درآمد cv2 درآمد numpy NP طور مٹیالا پیمانہ طور #load تصویر تصویر = cv2.imread ('gradient.jpg'، 0) cv2.imshow ('اصل'، تصویر) cv2.waitKey (0)
# 127 سے نیچے کی قیمت 0 (سیاہ) پر جائیں ، اور 127 سے اوپر 255 (سفید) پر جائیں
_، thresh1 = cv2.threshold (تصویری ، 127،255 ، cv2.THRESH_BINARY) cv2.imshow ('1 چوک' ، thres1) cv2.waitKey (0)
# 127 سے نیچے کی قیمت 255 پر جاسکتی ہے اور 127 سے اوپر کی قیمت 0 پر جاتی ہے (اوپر کا الٹا)
_، thres2 = cv2.threshold (تصویری ، 127،255 ، cv2.THRESH_BINARY.gV) cv2.imshow ('2 حد' ، thres2) cv2.waitKey (0)
# 127 سے اوپر کی قیمت 127 پر چھوٹی ہوئی (منعقد کی گئی) ہے ، 255 دلیل غیر استعمال ہے۔
_، thresh3 = cv2.threshold (تصویری ، 127،255 ، cv2.THRESH_TRUNC) cv2.imshow ('3 تھرش ٹرنک' ، thres3) cv2.waitKey (0)
# 127 سے نیچے کی قیمتیں 0 پر جاتی ہیں ، 127 سے اوپر کے کوئی تبدیلی نہیں ہوتی ہے
_ ، thresh4 = cv2.threshold (تصویری ، 127،255 ، cv2.THRESH_TOZERO) cv2.imshow ('4 چوک' ، thres4) cv2.waitKey (0)
# اوپر کی شرح ، 127 سے نیچے کوئی تبدیلی نہیں ہے ، 127 سے اوپر صفر پر جاتا ہے
_ ، thresh5 = cv2.threshold (تصویری ، 127،255 ، cv2.THRESH_TOZERO_INV) cv2.imshow ('5 چوک' ، thres5) cv2.waitKey (0) cv2.destroyAllWindows ()
5. بازی ، کٹاؤ ، کھلنا / بند ہونا
یہ ریاضیاتی مورفولوجی کے میدان میں آپریشن ہیں
بازی - یہ ایک تصویر میں آبجیکٹ کی حدود میں پکسلز کا اضافہ کرتی ہے۔
کٹاؤ - ایک شبیہہ میں آبجیکٹ کی حدود میں پکسلز کو ہٹاتا ہے۔
افتتاحی - کشرن کے بعد بازی۔
کلوزنگ - کشیدگی کے بعد بازی
تصویروں کی نشاندہی کرنے میں افتتاحی بہت مددگار ثابت ہوتا ہے کیونکہ اس سے پہلے یہ تصویر کو کٹاؤ (شور کو مٹا دیتا ہے) کے ذریعہ باریک بار بار بار کرتا ہے اور پھر اسے پھیلاتا ہے۔
بازی اور کٹاؤ کے ساتھ الجھن
عام طور پر سفید پس منظر والی تصویروں میں بازی اور کٹاؤ کے مابین بعض اوقات الجھن پائی جاتی ہے ، کیوں کہ اوپن سی وی سفید رنگ کے پس منظر کو اصلی تصویر کی بجائے شبیہہ کو پھٹا ہوا یا ختم کرنا سمجھتا ہے ، لہذا اس صورت میں کٹاؤ بازی اور اس کے برعکس کام کرتا ہے ، جیسا کہ تصویر کے نمونے میں دکھایا گیا ہے۔ نیچے دکھایا گیا.
یاد رکھیں، بازی کرتے ہوئے ایک تصویر میں اشیاء کی حدود کو پکسلز کا اضافہ کر دیتی کشرن ایک تصویر میں اشیاء کی حدود میں پکسلز ہٹاتا
درآمد cv2 درآمد نپسی بطور این پی امیج = cv2.imread ('imagecv.png'، 0) cv2.imshow ('original'، image) cv2.waitKey (0)
# ایروژن
# آئیے اپنے دانا کے سائز کی وضاحت کریں
دانا = np.ones ((5،5)، np.uint8)
# اب ہم شبیہہ کو ضائع کردیتے ہیں ، یہاں تکرار وقت کی کوئی بات نہیں ہے جو آپ تصویر کو خراب کرنا چاہتے ہیں
کٹاؤ = cv2.erode (شبیہ ، دانا ، تکرار = 1) cv2.imshow ('کٹاؤ' ، کٹاؤ) cv2.waitKey (0)
# خوشی
dilation = cv2.dilate (شبیہ ، دانا ، تکرار = 1) cv2.imshow ('dilation'، dilation) cv2.waitKey (0)
# کھولنا ، شور کو دور کرنے کے لئے اچھا ہے
افتتاحی = cv2. MorphologyEx (تصویر ، cv2.MORPH_OPEN ، دانا) cv2.imshow ('افتتاحی' ، افتتاحی) cv2.waitKey (0)
# بند ، شور کو دور کرنے کے لئے اچھا ہے
بند کرنا = cv2.morphologyEx (تصویری ، cv2.MORPH_CLOSE ، دانا) cv2.imshow ('بند' ، بند) cv2.waitKey (0) cv2.destroyAllWindows ()
6. ایج کا پتہ لگانے اور تصویری تدریج
کمپیوٹر وژن میں ایج کا پتہ لگانا بہت اہم علاقہ ہے ، خاص طور پر جب شکلوں سے نمٹنے کے۔
کناروں کو تصویر کی حدود سے تعبیر کیا جاسکتا ہے ، دراصل یہ وہ کناروں ہیں جو شبیہیں میں شے کی وضاحت کرتی ہیں جس سے وہ شبیہہ کے بارے میں بہت سی معلومات کو محفوظ رکھتے ہیں۔
عام طور پر کناروں کو کسی شبیہہ میں اچانک تبدیلیاں (روابط) سے تعبیر کیا جاسکتا ہے اور وہ پکسلز کی طرح زیادہ سے زیادہ معلومات کو انکوڈ کرسکتے ہیں۔
مذکورہ بالا شبیہہ دکھاتی ہے کہ کمپیوٹر ویژن کس طرح اس تصویر کی شناخت اور شناخت کرتا ہے۔
ایج ڈیٹیکشن الگورتھم: - ایج ڈیٹیکشن الگورتھم کی تین اہم اقسام ہیں
- Sobel - عمودی یا افقی تصاویر پر زور دینے کے لئے.
- لیپلاسیان - کم خرابی کی شرح ، اچھی طرح سے بیان کردہ کناروں اور درست پتہ لگانے کی وجہ سے زیادہ سے زیادہ۔
- کینی ایج کا پتہ لگانے کے الگوریتم (1986 میں جان ڈاٹ ایف. کینی کے ذریعہ منحرف)
1. گاوسی کلنک کا اطلاق ہوتا ہے
2. شبیہہ کی شدت کا میلان ڈھونڈتا ہے
3. غیر زیادہ سے زیادہ دباؤ کا اطلاق ہوتا ہے (یعنی کنارے نہیں والے پکسلز کو ہٹاتا ہے)۔
H. ہیسٹریسس دہلیز کا اطلاق ہوتا ہے (یعنی اگر پکسل بالائی اور نچلی دہلیز کے اندر ہے تو ، اسے ایک کنارے کے طور پر سمجھا جاتا ہے)
درآمد cv2 درآمد numpy بطور این پی امیج = cv2.imread ('input.jpg'، 0) اونچائی ، چوڑائی = تصویری شکل
# محفوظ
# سبیل کناروں کو جانچنا
sobel_x = cv2.Sobel (تصویری ، cv2.CV_64F ، 0،1 ، ksize = 5) sobel_y = cv2.Sobel (شبیہ ، cv2.CV_64F ، 1،0 ، ksize = 5) cv2.imshow ('اصل' ، شبیہ) cv2.waitKey (0) cv2.imshow ('sobelx'، sobel_x) cv2.waitKey (0)
# خود سے
cv2.imshow ('sobely'، sobel_y) cv2.waitKey (0)
sobel_OR = cv2.bitwise_or (sobel_x، sobel_y) cv2.imshow ('sobelOR'، sobel_OR) cv2.waitKey (0)
# لایلیئن
لاپلاسیان = سی وی 2۔لاپلیشین (شبیہ ، cv2.CV_64F) cv2.imshow ('لاپلاسیان' ، لیپلیسیئن) cv2.waitKey (0)
# کسی بھی کنارے کا پتہ لگانے کے الگورتھم گریجینٹ ویلیوز کو تھریشولڈز کے طور پر استعمال
کرتے ہیں # کنڈی میں ہمیں دو اقدار فراہم کرنے کی ضرورت ہے: دہلیز 1 اور حد 2۔
چوک 2 سے بڑا کوئی # میلان ایک ایج سمجھا جاتا ہے۔
حد 1 سے بڑے # کسی بھی میلان کو ایک کنارے نہیں سمجھا جاتا ہے۔
دہلیز 1 اور دہلیز 2 کے درمیان # قیمتیں یا تو کنارے یا غیر کنارے کے طور پر ہیں
# کس طرح ان کی شدت منسلک ہوتی ہے ، اس معاملے میں 60 سے نیچے کی کسی بھی قیمت کو # نان کناروں کے برابر سمجھا جاتا ہے
جبکہ 120 سے اوپر کی کوئی بھی قیمت کو کناروں کے طور پر سمجھا جاتا ہے۔
canny = cv2.Canny (شبیہہ ، 60،120) cv2.imshow ('canny'، canny) cv2.waitKey (0) cv2.destroyAllWindows ()
14. نقطہ نظر اور affine ٹرانسفارم
آئیے ایک قدم پیچھے ہٹیں اور پیار اور غیر منسلک تبدیلیوں پر ایک نظر ڈالیں ، ذیل میں دکھایا گیا اصل امیج واضح طور پر غیر منسلک امیج ہے کیونکہ کناروں کو کسی مقام پر ملنا ہے تاہم ہم اس کو warped اور نقطہ نظر کو دیکھتے ہوئے اسے سیدھا کرسکتے ہیں تبدیل.
اس نقطہ نظر کو تبدیل کرنے کے ل we ہمیں اصل شبیہہ کے چار نقاط اور پھر آؤٹ پٹ امیج کے چار نکات کی ضرورت ہے ، ان کو پوائنٹس_ اے اور پوائنٹس_ بی کے ذریعہ اشارہ کیا گیا ہے۔ سب سے پہلے ان نکات کی مدد سے ہم ایک منتقلی میٹرکس کی گنتی کرتے ہیں ، جس کی مدد سے getPerscreenTransform فنکشن کی مدد کرتے ہیں ۔
اور پھر اس میٹرکس کو حتمی آؤٹ پٹ پیدا کرنے کے لئے وارپ پریسپیکٹیو فنکشن کو دیا جاتا ہے ۔
اب آئیے پہلے پریسکیٹو ٹرانسفارم کو آزمائیں ۔
درآمد cv2 درآمد NP بطور این پی درآمد matplotlib.pyplot پلٹ امیج کے طور پر = cv2.imread ('paper.jpg') cv2.imshow ('اصل' ، شبیہ) cv2.waitKey (0)
اصل تصویر کے 4 کونوں پر مشتمل # کوآرڈینیٹ
پوائنٹس_ا = np.float32 (،،،])
مطلوبہ آؤٹ پٹ کے 4 کونوں کے
# نقاط # A4 کاغذ 1: 1.41 کا تناسب استعمال کرتے ہیں
point_B = np.float32 (،،،])
# امتیازی تبدیلی میٹرکس ، ایم کی گنتی کے لئے دو پوائنٹس کے دو سیٹوں کا استعمال کریں
ایم = cv2.getPerscreenTransform (پوائنٹس_A ، پوائنٹس_B) warped = cv2.warp پراسکیوپٹ (شبیہہ ، M ، (420،594)) cv2.imshow ('warpprespected'، warped) cv2.waitKey (0) cv2.destroyAllWindows ()
افیفن ٹرانسفارم تو آسان ہے نان-ایفائن ٹرانسفارم ، کیوں کہ ٹرانسفارم حاصل کرنے کے لئے ہمیں صرف تین نکات کی ضرورت ہے۔ سارا عمل یکساں ہے لیکن نقطہ نظر کی تبدیلی کے بجائے اب ہمارے پاس پیٹھ میں تبدیلی آرہی ہے اور ہم دستی طور پر داخل ہونے کی بجائے شکل کی شکل سے warpAffine میں کالس اور قطاریں بھی متعین کرتے ہیں ۔
درآمد cv2 درآمد NP بطور این پی درآمد matplotlib.pyplot پلٹ امیج کے طور پر = cv2.imread ('box.jpg') قطاریں ، کالس = شبیہہ۔ شکل cv2.imshow ('اصل' ، شبیہ) cv2.waitKey (0)
اصل تصویر کے 3 کونوں پر مشتمل # کوآرڈینیٹ
point_A = np.float32 (،،])
مطلوبہ آؤٹ پٹ کے 3 کونوں کے
# نقاط # A4 کاغذ 1: 1.41 کا تناسب استعمال کرتے ہیں
point_B = np.float32 (،،])
# املا # ٹرانسفارمیشن میٹرکس ، ایم کی گنتی کے لئے دو پوائنٹس کے دو سیٹوں کا استعمال کریں
ایم = cv2.getAffineTransform (پوائنٹس_A ، پوائنٹس_B) warped = cv2.warpAffine (تصویر ، ایم ، ( کالس ، قطار)) cv2.imshow ('warpaffine' ، warped) cv2.waitKey (0) cv2.destroyAllWindows ()
8. براہ راست خاکہ کی درخواست
سب سے پہلے ، اپنے آپ کو مبارکباد پیش کریں کہ مذکورہ بالا تمام تصویری ہیرا پھیری کے افعال کو پڑھنے کے بعد آپ نے اس منی پروجیکٹ کو تشکیل دے دیا ہے۔ لہذا ازگر اوپن سی وی کے اس منی پروجیکٹ میں ہم لوپس اور افعال کے کچھ نئے تصورات سیکھنے جا رہے ہیں۔ اگر آپ پروگرامنگ سے واقف ہیں تو ، آپ کو اس کے بارے میں ایک وسیع تر نظریہ ہونا چاہئے کہ فنکشن اور لوپس کیا ہیں۔ تاہم ، ازگر میں لوپ اور افعال کا بنیادی تصور وہی رہتا ہے لیکن ان کی وضاحت کرنے کا طریقہ تھوڑا سا تبدیل ہوتا ہے۔
لہذا اس پروگرام کے آغاز پر ہم بیانات کا ایک خاص گروہ دیکھ سکتے ہیں جس کے تحت عنوان " ڈیف اسکیچ (شبیہ): " کے عنوان سے ہوتا ہے : یہ کسی فنکشن کی باضابطہ تعریف ہے جس میں بیانات کا گروپ ایک مخصوص آؤٹ پٹ کے لئے مل کر کام کرنا ہے۔
لہذا یہ خاکہ ایک فنکشن ہے ، ازگر میں فن کی تعریف "ڈیف" کے ذریعے ہوتی ہے اور ":" نشان سے ختم ہوتی ہے۔ نیز بیانات جو فنکشن کے اندر ہونا ضروری ہیں یا آپ یہ کہہ سکتے ہیں کہ فنکشن کے صحیح طریقے سے چلنے کے لئے جو درکار ہیں ، وہ فنکشن کے ذریعہ خود بخود سیدھ میں منسلک ہیں۔ لہذا افعال سے باہر آنے کے لئے بیانات کو مکمل طور پر سیدھے رہنے کی ضرورت ہے۔ مزید حوالہ جات کے ل you آپ گوگل سے رجوع کرسکتے ہیں کہ اشتہار میں افعال کی تعریف کیسے کی گئی ہے۔
لہذا اس خاکہ فعل میں ہم نے تصویری پروسیسنگ کی متعدد پرتیں متعارف کروائیں جو ایک ساتھ مل کر ایک آؤٹ پٹ دیتے ہیں۔ او.ل سی وی اس پر آسانی سے عمل کرسکتا ہے اور اس کے بعد گاؤشی کلنک کو گرے اسکیل امیج پر لاگو کیا جاتا ہے تاکہ شور کو کم کیا جاسکے۔ پھر کناروں کو کنڈی کا پتہ لگانے والے الگورتھم کی مدد سے نکالا جارہا ہے پھر کنارے کی وضاحت والے امیج پر بائنری الٹا لگایا جاتا ہے ، یہاں بائنری انورس بھی بٹویس_نوٹ کے ذریعہ کیا جاسکتا ہے لیکن ہم جان بوجھ کر اس چوکھٹ بائنری کو الٹا منتخب کرتے ہیں کیونکہ یہ آزادی دیتا ہے۔ اس کے پیرامیٹرز طے کرنے تک جب تک کہ ہمیں ایک واضح امیج نہ آجائے۔
یہ بھی نوٹ کرنا کہ فنکشن دلائل کی تصویر لیتا ہے اور دو دلائل ریٹ اور ماسک کو لوٹاتا ہے ۔ جبکہ ریٹ بولین ہے جس میں یہ بتایا گیا ہے کہ فنکشن کامیابی کے ساتھ چل رہا ہے یا نہیں اور ماسک اس فنکشن کا حتمی نتیجہ ہے یعنی عمل شدہ شبیہہ۔
پھر دوسرا تصور او پی سی وی میں آپریٹنگ ویب کیم کا ہے جو cv2.VideoCapture (0) فنکشن کے ذریعہ کیا جاتا ہے ، جو شبیہہ کو ایک آبجیکٹ کیپ میں اسٹور کرتا ہے جسے کیپ cap.read () فنکشن کے ساتھ پڑھ سکتی ہے ، اس ٹوپی کو نوٹ کرنے کے لئے بھی یہاں ہے ۔ پڑھیں () لامحدود کے اندر ہیں جبکہ لوپ کو مستقل طور پر تصاویر پر قبضہ کرنا پڑتا ہے ، تاکہ اسے براہ راست ویڈیو کا احساس دلائیں ، جہاں ویڈیو کا فریم ریٹ آپ کے ویب کیم کا فریم ریٹ ہوگا جو زیادہ تر 24 سے 60 کے درمیان ہوتا ہے۔ fps.
کیپ.ریڈ () ریٹ اور فریم لوٹاتا ہے ، جہاں ریٹ ریٹ بولین ہے جس سے یہ ظاہر ہوتا ہے کہ فنکشن کامیابی کے ساتھ چل رہا ہے یا نہیں اور فریم ویب کیم کے ذریعہ لی گئی تصویر پر مشتمل ہے۔
ذیل میں براہ راست خاکہ چلانے کے لئے مکمل ازگر اوپن سی وی کوڈ ہے
درآمد سی وی 2 درآمد نمی کو بطور این پی # اسکیچ جنریٹنگ فنکشن ڈیف اسکیچ (شبیہ): # تصویر کو گرے اسکیل میں تبدیل کریں img_gray = cv2.cvt કલر (شبیہ ، cv2.COLOR_BGR2GRAY) # گاؤس بلر img_gray_blur = cv2.Gaussian کا استعمال کرتے ہوئے تصویر کو اپ لوڈ کرنا 5،5)، 0) # ٹیکسٹ ایجز کیننی_جسٹس = سی وی 2۔کینی (img_gray_blur، 10،70) # تصویر کو الٹ بائنرائز کریں ret، mask = cv2.threshold (canny_edges، 70،255، cv2.THRESH_BINARY_INV) ویب سائٹ کا نقشہ واپس ، ٹوپی وہ چیز ہے جو ویڈیو کیپچر کے ذریعہ فراہم کی جاتی ہے # اس میں بولین پر مشتمل ہے جس میں یہ اشارہ کیا گیا تھا کہ آیا یہ کامیاب ہے (ریٹ) # اس میں ویب کیم (فریم) کیپ = cv2.VideoCapture (0) سے جمع کی گئی تصاویر بھی ہیں جبکہ سچ ہے: ret، فریم = cap.read () cv2.imshow ('liveketcher'، خاکہ (فریم)) اگر cv2.waitKey (1) == 13: # 13 انٹراکی بریک # ریریل کیمرا اور قریبی ونڈو ہے ، کیپ ریلیز () کیپ ریلیز () cv2.destroyAllWindows () کی مدد سے ویب کیم جاری کرنا یاد رکھیں ۔
لہذا یہ ازگر - اوپن سی وی میں تصویری جوڑتوڑ کے حصہ 2 کا اختتام ہے۔ کمپیوٹر وژن اور اوپن سی وی کی اچھی خاصیت حاصل کرنے کے ل previous ، پچھلے مضامین کو دیکھیں (ازگر اوپن سی وی میں آئٹم اوپن سی وی اور تصویری جوڑتوڑ کے ساتھ شروعات کرنا (حصہ 1) اور آپ کمپیوٹر وژن کے ساتھ کچھ اچھا بنا پائیں گے۔