- 1. تصویری ٹرانسفارمیشنز - ایفائن اور نان ایفائن ٹرانسفارمیشن
- 2. تصویری ترجمہ - اوپر ، نیچے ، بائیں اور دائیں تصویر منتقل کرنا
- 3. شبیہ کی گھماؤ - شبیہہ کی کتائی
- 4. اسکیلنگ ، ریسائزنگ اور انٹرپولیشن
- 5. تصویری اہرام - نیا سائز دینے کا ایک اور طریقہ
- 6. فصل - آپ چاہتے تصویر کے علاقے کاٹنا
- 7. تصویروں کو روشن اور تاریک کرنے کے لئے ریاضی کے آپریشن
پچھلے ٹیوٹوریل میں ، ہم نے اوپن سی وی کے بارے میں سیکھا ہے اور اس کا استعمال کرتے ہوئے کچھ بنیادی تصویری پروسیسنگ کی ہے جیسے کہ گرے اسکیلنگ ، رنگ سنترپتی ، ہسٹگرام ، رنگ خالی جگہیں ، آر جی بی جزو وغیرہ۔ جیسا کہ پچھلے سبق میں بتایا گیا ہے ، اوپن سی وی اوپن سورس کامیوٹر ویژن لائبریری ہے جس میں سی ++ ، ازگر اور جاوا انٹرفیس اور ونڈوز ، لینکس ، میک او ایس ، آئی او ایس اور اینڈروئیڈ کی حمایت کرتے ہیں۔ لہذا یہ راسبیری پائی میں ازگر اور لینکس ماحول کے ساتھ آسانی سے انسٹال کیا جاسکتا ہے۔ اور اوپن سی وی اور منسلک کیمرہ کے ساتھ رسبری پائی کا استعمال بہت سے ریئل ٹائم امیج پراسیسنگ ایپلی کیشنز بنانے کے لئے کیا جاسکتا ہے جیسے چہرہ کا پتہ لگانا ، چہرہ لاک ، آبجیکٹ سے باخبر رہنے ، کار کی نمبر پلیٹ کا پتہ لگانا ، ہوم سیکیورٹی سسٹم وغیرہ۔
اس ٹیوٹوریل میں ، ہم یہ دیکھنے جا رہے ہیں کہ اوپن سی وی کا استعمال کرتے ہوئے ہم کیسے تصویر میں ہیرا پھیری کرنے جارہے ہیں ۔ یہاں ہم اوپن سی وی کا استعمال کرتے ہوئے کسی تصویر پر مندرجہ ذیل فنکشن کا اطلاق کرنا سیکھیں گے:
- تصویری تبدیلیاں - عفائین اور غیر منفعتی تبدیلی
- تصویری ترجمہ - اوپر ، نیچے ، بائیں اور دائیں تصویر منتقل کرنا
- شبیہ کی گردش - امیج کو گھماؤ
- اسکیلنگ ، ریسائزنگ اور انٹرپولیشن
- تصویری اہرام - نیا سائز دینے کا ایک اور طریقہ
- فصل کاٹنا - جس تصویر کا علاقہ آپ چاہتے ہیں اسے کاٹنا
- چشموں کو روشن اور تاریک کرنے کے لئے ریاضی کے عمل
1. تصویری ٹرانسفارمیشنز - ایفائن اور نان ایفائن ٹرانسفارمیشن
تبدیلیاں کسی نقشے پر نافذ کردہ ہندسی تحریفات ہیں ، یہاں بگاڑ کا یقینی طور پر مطلب غلطیوں سے نہیں ہے لیکن اس نقطہ نظر سے پیدا ہونے والے تناظر کے امور کو درست کرنے کے لئے تصحیح کی ایک قسم ہے جہاں تصویر پکڑی گئی تھی۔ تصویر تبدیلیوں کی دو قسمیں ہیں - Affine اور غیر Affine
منسلک تبدیلی تین طرح کی اسکیلنگ ، گردش اور ترجمہ کی ہوتی ہے ، پیار کی تبدیلی میں اہم بات یہ ہے کہ شبیہہ کی تبدیلی سے پہلے اور بعد میں لائنیں متوازی ہوتی ہیں۔



غیر افیون تبدیلیوں یا پیش گوئی کی تبدیلیوں سے ہم آہنگی ، لمبائی یا زاویہ کو محفوظ نہیں رکھا جاتا ہے ، تاہم اس سے مخاطبیت اور واقعات کو محفوظ رکھا جاتا ہے ، اس سے قطع تعلق کا مطلب یہ ہے کہ دونوں نکات ایک ہی سیدھی لکیر پر کھڑے ہیں۔
کمپیوٹر کے ویژن میں نان ایفائن تبدیلیاں بہت عام ہیں اور یہ کیمرے کے مختلف زاویوں سے پیدا ہوتی ہیں۔ غیر affine یا پیش قیاسی تبدیلیوں کو ہوموگرافی بھی کہا جاتا ہے ۔

2. تصویری ترجمہ - اوپر ، نیچے ، بائیں اور دائیں تصویر منتقل کرنا
اگر ہم ایک ہی وقت میں x اور y ترجمے پر عمل کرتے ہیں تو تصویری ترجمہ امیج کو اوپر ، نیچے ، بائیں اور دائیں اور یہاں تک کہ اخترن کو آگے بڑھاتا ہے۔
اب تصویری ترجمے کرنے کے ل we ہم اوپنکیو کا وارپآفائن فنکشن استعمال کرتے ہیں ، cv2.warpAffine ان تراجم کو نافذ کرنے کے لئے استعمال کیا جاتا ہے لیکن اس کے لئے ہمیں ترجمے کے میٹرکس کی ضرورت ہے۔
ترجمہ میٹرکس ،
T = 1 0 Tx
0 1 ٹائی
T X ، T y وہ سمتیں ہیں جہاں تصویر کی شفٹ ہوتی ہے۔
جس میں ٹی ایکس ایکس محور کے ساتھ ساتھ شفٹ ہے (افقی)
T Y Y محور (عمودی) کے ساتھ ساتھ شفٹ ہے
# یہ ایک مابعد کی تبدیلی ہے جو صرف ایک شبیہہ کی حیثیت کو تبدیل کرتی ہے # ہم ان تبدیلیوں کو نافذ کرنے کے لئے cv2.warpAffine کا استعمال کرتے ہیں۔ درآمد cv2 NP طور درآمدی numpy تصویر = cv2.imread ('input.jpg') # سٹور اونچائی اور تصویر کی چوڑائی اونچائی، چوڑائی = image.shape پرنٹ (image.shape) quater_height، quater_width = اونچائی / 4، چوڑائی / 4 T = np.float32 (،]) img_translation = cv2.warpAffine (تصویری ، T ، (چوڑائی ، اونچائی)) پرنٹ (T) cv2.imshow ('original_image'، تصویری) cv2.waitKey (0) cv2.imshow (' ترجمہ '، img_translation) cv2.waitKey (0) cv2.destroyAllWindows ()

کنسول آؤٹ پٹ - (183 ، 275) - اونچائی اور چوڑائی
- T میٹرکس
]
3. شبیہ کی گھماؤ - شبیہہ کی کتائی
شبیہ کی گردش ایک شبیہہ کو کسی نقطہ یا نقطہ کے بارے میں ، جس طرح گھومنے والا نقطہ محور کی طرح کام کرتا ہے ، گردش کرتا ہے۔
جیسا کہ ترجمہ میں ہمارے پاس ٹی میٹرکس ہے ، گردش میں ہمارے پاس ایم میٹرکس ہے
گھماؤ میٹرکس ، M میٹرکس = Cosθ -Sinθ
سینو کوسی
جہاں θ گھماؤ کا زاویہ ہے ، مخالف گھڑی کی سمت میں ماپا جاتا ہے۔
اس کے علاوہ ، ایک بات یہ بھی ہے کہ اوپن سی وی آپ کو ایک ہی وقت میں ، cv2.getRotationMatrix2D (گردش_سینٹر_ ایکس ، گردش_سینٹر_ی ، گردش کا زاویہ ، پیمانے) کا استعمال کرتے ہوئے شبیہہ کو فروخت اور گھمانے کی اجازت دیتا ہے ۔
ہم تاحال تصویر کی گردش حاصل کرنے کے لئے اوپنکیو کا وارپفائن فنکشن استعمال کرتے ہیں لیکن پچھلے معاملے کی طرح یہاں میٹرک ٹرانسکس کی بجائے ہم روٹیشن میٹرکس کا استعمال کرتے ہیں۔
درآمد cv2 درآمد نپٹی بطور این پی امیج = cv2.imread ('input.jpg') اونچائی ، چوڑائی = شبیہہ۔ # تصویر کو اس کے مرکز کے گرد گھومنے کے ل the اونچائی اور چوڑائی کو 2 سے بڑھاو (چوڑائی / 2) ، اونچائی / 2) ، 90،1) گھمایا ہوا_ایمج = cv2.warpAffine (شبیہ ، گردش_متریکس ، (چوڑائی ، اونچائی)) cv2.imshow ('اصل تصویر' ، شبیہ) cv2.waitKey (0) cv2.imshow ('گھمایا ہوا امیج) '، گھمائے ہوئے_ایمج) cv2.waitKey (0) cv2.destroyAllWindows ()

اب تصویر کو 90 ڈگری کے ذریعہ گھمایا جاتا ہے ، کینوس کے سائز کی وجہ سے اس کی کھیپ آجاتی ہے ، کیونکہ کینوس کا سائز ایک ہی رہتا ہے لیکن گردش کی وجہ سے تصویر کا سائز کینوس کے سائز میں فٹ نہیں بیٹھتا ہے۔ اس کو اسکیلنگ عنصر کو منفی میں ترتیب دے کر ایڈجسٹ کیا جاسکتا ہے ، لیکن اس سے شبیہہ کے پیچھے ایک سیاہ پس منظر کی اجازت دیتا ہے۔
لہذا آپ اس کی پیش گوئی کرکے یا اس کا اندازہ لگا کر تصویر کی اونچائی اور چوڑائی کو مقرر کرسکتے ہیں یا شبیہ کو گھومانے کا ایک اور طریقہ یہ ہے کہ اس کو ٹرانسپوز کرکے دیکھا جاسکتا ہے ، لیکن یہ شبیہ کو 90 ڈگری کے ضرب کے ذریعہ گھڑی کی مخالف سمت میں گھماتی ہے۔

4. اسکیلنگ ، ریسائزنگ اور انٹرپولیشن
اسکیلنگ اور ریسائزنگ ایفائین ٹرانسفارمیشن ہیں ، امیج کو ریسائز کرنا وہی ہے جو ہم نے کافی وقت کیا ہے اور ہم نے انٹرپولیشن سے بھی نمٹا ہے ، جیسے جب آپ اس تصویر کو بڑے سائز میں ڈھال رہے ہیں جس میں ہم پکسلز کو بڑھا رہے ہیں تو ، کچھ خلاء موجود ہیں پکسلز اور اسی جگہ پر انٹرپولیشن آتی ہے۔
یہ شبیہہ کے سائز کو چھوٹے سے بڑے تک بڑھنے یا شبیہہ کے سائز کو بڑے سے چھوٹے میں کم کرنے پر ہوسکتا ہے۔
تکنیکی طور پر ، انٹرپولیشن معلوم اعداد و شمار کے مجرد سیٹ میں ، نئے ڈیٹا پوائنٹس (پکسلز) کی تعمیر کا ایک طریقہ ہے۔
موجود ہیں پرکشیپ کے طریقوں کے مختلف اقسام کی طرح OpenCV میں
cv2.INTER_AREA - سکڑنے یا نیچے نمونے لینے کے ل good اچھا ہے
cv2.INTER_NEAREST - سب سے تیز
cv2.LINEAR - زومنگ یا اپ نمونے لینے کے ل good اچھا (پہلے سے طے شدہ)
cv2.CUBIC - بہتر
cv2.INTER_LANCZOS4 - بہترین
# نیا سائز تبدیل کرنا cv2.resize فنکشن کا استعمال کرتے ہوئے بہت آسان ہے ، اس کے دلائل ہیں # cv2.resize (تصویری ، dsize (آؤٹ پٹ تصویر کا سائز) ، x_ اسکیل ، y_ اسکیل ، انٹرپلیشن) درآمد cv2 درآمد numpy بطور این پی امیج = cv2.imread ('ان پٹ)۔ jpg ') cv2.imshow (' original_image '، image) cv2.waitKey (0) # آئیے ، تصویر کو 3/4 اصلی تصویر کا سائز بنائیں یعنی ترازو 75٪ تک رہ جائے image_scaled = cv2.resize (تصویری ، کوئی بھی نہیں ، ایف ایکس = 0.75 ، فائی = 0.75) # لینس لکی رکاوٹ کھلی سی وی کے لئے طے شدہ طریقہ ہے ہمیں اسے بطور فعل نافذ کرنے کی ضرورت نہیں ہے۔ cv2.imshow ('اسکیلنگ_ لائنر رکاوٹ' ، تصویری_قفا شدہ) cv2.waitKey (0) # آئیے ہماری تصویر کا سائز دوگنا کریں img_double = cv2.resize (تصویری ، کوئی بھی نہیں ، fx = 2 ، fy = 2 ، رکاوٹ = cv2.INTER_CUBIC) cv2.imshow ('scaing_cubicInterpolation'، img_double) cv2.waitKey (0) # کے عین مطابق طول و عرض کی طرف سے نیا سائز کرنے دو image_resize cv2.resize = (تصویر، (200،300)، پرکشیپ = cv2.INTER_AREA) cv2.imshow ('scaling_exact'، image_resize) cv2.waitKey (0) cv2.destroyAllWindows ()



5. تصویری اہرام - نیا سائز دینے کا ایک اور طریقہ
پرامائڈنگ امیج کا مطلب یا تو اپسکلنگ (بڑی تصاویر) یا ڈاون اسکلنگ (سکڑتی ہوئی تصاویر) ہے۔
یہ آسانی سے سائز تبدیل کرنے کا ایک مختلف طریقہ ہے جس سے ہمیں آسانی سے اور جلدی سے نقشوں کی پیمائش کرنے کی اجازت ملتی ہے ، جس سے نئی شبیہ کی اونچائی اور چوڑائی کو نصف تک کم کیا جاسکتا ہے۔
جب چیز کو ڈھونڈنے والے شبیہیں تراشنے والی آبجیکٹ کا پتہ لگانے میں یہ کارآمد ثابت ہوتا ہے۔
درآمد cv2 تصویر = cv2.imread ('input.jpg') چھوٹا = cv2.pyrDown (تصویر) بڑا = cv2.pyrUp (چھوٹا) cv2.imshow ('اصل' ، تصویر) cv2.waitKey (0) cv2.imshow ('چھوٹا' ، چھوٹا) cv2.waitKey (0) cv2.imshow ('बड़ा' ، بڑا) cv2.waitKey (0) cv2.destroyAllWindows ()


بڑی شبیہہ میں آپ دیکھیں گے کہ اصل تصویر کے اسی سائز کا ہونا اس کی چھوٹی دھندلا پن ہے کیونکہ اسے چھوٹی تصویر سے براہ راست بڑی تصویر میں تبدیل کیا جا رہا ہے۔ لیکن اگر ہم اس کو بازی لگاتے ہیں تو پچھلے ایک کی طرح شبیہہ کے معیار میں بہتری آ جاتی ہے کیونکہ جب تصویر کو بڑھایا جاتا ہے تو خالی جگہوں کو بھرتے ہوئے وقفہ کاری پکسلز کا تخمینہ لگاتا ہے۔
اب ایک ہی کوڈ کو چلانے لیکن کیوبک بازی کے ساتھ بڑی شبیہہ کا بہتر معیار ملتا ہے۔ ذیل میں تصاویر اصلی تصویر کے درمیان موازنہ ، چھوٹی تصویر اور چھوٹی تصویر کا کیوبک انٹرپولیٹڈ ورژن ، تصویر کا چھوٹا ورژن۔
درآمد cv2 تصویر = cv2.imread ('input.jpg') چھوٹا = cv2.pyrDown (تصویر) بڑا = cv2.pyrUp (چھوٹا) cv2.imshow ('اصل' ، تصویر) cv2.waitKey (0) cv2.imshow ('چھوٹا' ، چھوٹا) cv2.waitKey (0) cv2.imshow ('बड़ा' ، بڑا) cv2.waitKey (0) # کیوبک انٹرپلیشن img_double = cv2.resize (چھوٹا ، کوئی نہیں ، fx = 2 ، fy = 2 ، انٹرپلیشن = cv2.INTER_CUBIC) cv2.imshow ('اسکینگ_کوبک انٹرپولیشن'، img_double) cv2.waitKey (0) cv2.destroyAllWindows ()


نوٹ: اگر آپ تصویر میں چھوٹی اور چھوٹی تصاویر کی متعدد چھوٹی کاپیاں بنانا چاہتے ہیں یا مسلسل بڑی تعداد میں بڑھتی ہوئی تصویروں کی ایک سے زیادہ بڑی کاپیاں بنانا چاہتے ہیں تو ہملوپ کے لئے یالوپ پائیرڈاؤن یا پیرپ اپ فنکشن میںرکھتے ہوئے استعمال کرسکتے ہیں۔
6. فصل - آپ چاہتے تصویر کے علاقے کاٹنا
تصاویر کو کاٹنا تصویر کے کسی حصے کو نکالنا ہے۔
اوپن سی وی میں براہ راست کرپنگ فنکشن نہیں ہوتا ہے لیکن یہ نیچے کے کوڈ کا استعمال کرتے ہوئے نپسی کے ذریعہ آسانی سے کیا جاسکتا ہے
کھیتی ہوئی = شبیہہ

ہم شبیہہ کو صف میں رکھتے ہیں اور اشاریہ سازی کے آلے یا طریقہ کو نمی میں استعمال کرتے ہیں ، ہم شروع صف سے قطار کی وضاحت کرتے ہیں اور کالم سے آخر کالم کے آخر میں کوما کے ذریعہ الگ ہوجاتے ہیں جس سے ہم تصویر حاصل کرنے کے لئے مستطیل نکال سکتے ہیں۔
درآمد cv2 درآمد نپٹی بطور این پی امیج = cv2.imread ('input.jpg') اونچائی ، چوڑائی = شبیہہ کی شکل # آئیے شروع پکسل کوآرڈینیٹ (کراپنگ مستطیل کے اوپر بائیں) اسٹارٹ_رو ، اسٹارٹ_کول = انٹ (اونچائی *.25) حاصل کریں۔ ، INT (چوڑائی *.25) # آئیے ، پکسل کوآرڈینیٹ (نیچے دائیں) آخر_قابو ، اختتام_کول = INT (اونچائی *.75) ، INT (چوڑائی *.75) # ہم مستطیل کو فصل کرنے کے ل we انڈکسنگ کا استعمال کریں جس کی ہماری خواہش ہے فصل = شبیہ cv2.imshow ("اصل شبیہ" ، تصویری) cv2.waitKey (0) cv2.imshow ("فصل کی تصویر" ، کرپٹ ) cv2.waitKey (0) cv2.destroyAllWindows ()

نوٹ کہ آپ پکسل کی اقدار کو اسٹارٹ_کول یا اسٹارٹ_رو کے بجائے براہ راست استعمال کرسکتے ہیں، وہ صرف صارف کے لئے آسان شناخت حاصل کرنے کے ل . دیئے گئے ہیں۔
7. تصویروں کو روشن اور تاریک کرنے کے لئے ریاضی کے آپریشن
اوپن سی وی میں ریاضی کے عمل بنیادی طور پر شبیہہ میں میٹرکس کو شامل یا گھٹا رہے ہیں ، میٹرکس کو شامل یا گھٹانا چمک کے بڑھنے یا کم ہونے پر اثر انداز ہوتا ہے۔
تو میٹرکس کو جوڑنے یا گھٹانے کے ل we ہمیں ان کو بنانا ہوگا اور نیمی کا ایک فنکشن ہوتا ہے جسے np.ones کہا جاتا ہے جو ہماری تصویر کے مطابق 1 کے سائز کے میٹرکس دیتا ہے۔
درآمد cv2 درآمد نپٹی بطور این پی امیج = cv2.imread ('input.jpg') # کسی کا میٹرکس بنائیں ، پھر اسے 100 کے پیمانے پر ضرب دیں # np.ones ایک امیج کو ایک ہی طول و عرض کے ساتھ ملتا ہے جس کی طرح ہم سب کے ساتھ اس معاملے میں 100 ہونے اقدار M = np.ones (image.shape، dtype = "uint8") * 100 # ہمیں اس کا استعمال ہماری تصویر اس میٹرکس M شامل کرنے کی چمک میں اضافہ #notice سے شامل = cv2.add (تصویر ، ایم) cv2.imshow ("شامل"، شامل) cv2.waitKey (0) # اسی طرح ہم # نوٹس کو بھی چمک میں کمی کو گھٹا سکتے ہیں subtected = cv2.sbtract (شبیہ، ایم) cv2.imshow ("subtected"، منہا) cv2.waitKey (0) cv2.destroyAllWindows ()
اس طرح اوپن سی وی کو شبیہہ پر بہت سے مختلف امیج پروسیسنگ آپریشنز کو لاگو کرنے کے لئے استعمال کیا جاسکتا ہے۔ ہم اگلے سبق میں تصویر کے ہیرا پھیری کے دوسرے کاموں کے ساتھ جاری رکھیں گے۔
