مقدمات OpenCV، خواندن و نمایش تصاویر، فضاهای رنگی

برای استفاده از پکیج opencv در برنامه خود باید عبارت  “import cv2” را در اول برنامه نوشته شود و همچنین برای استفاده از کتابخانه numpy دربرنامه خود باید عبارت  “import numpy as np” نوشته شود برای اینکه کلمه numpy کمی طولانی میباشد از کلمه np به جای آن استفاده میشود که کوتاه تر است . که با اضافه کردن as np  این کار صورت میگیرد.

برای اینکه از پکیج opencv استفاده شود باید cv2. نوشته شود و بعد آن توابعی را که از آن کتابخانه احتیاج داریم را بنویسیم .

برای اینکه از پکیج opencv استفاده شود باید cv2. نوشته شود و بعد آن توابعی را که از آن کتابخانه احتیاج داریم را بنویسیم .

برای load (بارگذاری)  یک عکس در برنامه باید از عبارت ()cv2.imread  استفاده کنیم که در پکیج opencv قراردارد.

در آرگومان اول باید آدرس کامل آن عکس که میخواهید بارگذاری شود را بدهید و دقت کنید که باید فرمت عکس هم نوشته شود که در مثال بالا عکس دارای فرمت jpg میباشد.

آرگومان دوم آن یک flag میباشد که راهی که عکس باید خوانده شود را تعیین میکند.

  • Cv2.IMREAD_COLOR : عکس رنگی را بارگذاری میکند.از شفافیت عکس غفلت خواهد شد. این یک flag پیش فرض میباشد.
  • Cv2.IMREAD_GRAYSCALE : عکس سیاه سفید را بارگذاری میکند.
  • Cv2.IMREAD_UNCHANGED :عکس را به صورتی که کانال alpha را داراست بارگذاری میکند.

میتوان به جای این سه flag از پاس دادن عدد 1 و 0 و 1- به ترتیب استفاده کرد.

برای مثال کد زیر را ببینید:

برای نمایش یک عکس در یک پنجره باید ازتابع ()cv2.imshow استفاده کرد که این پنجره به صورت اتوماتیک  با اندازه عکس متناسب میشود برای مثال:

آرگومان اول آن عنوانی است که در بالای پنجره ای که قرار است عکس را نمایش بدهد نشان داده میشود که این عنوان را باید داخل ‘  ‘ و یا “  “ بنویسید.

آرگومان دوم آن نام عکسی است که میخواهیم نمایش داده شود.

عبارت “cv2.waitKey”  یک تابع اجباری است که به ما اجازه میدهد تا زمانی که پنجره عکس باز است اطلاعات را دریافت کنیم.

آرگومان این تابع زمانی بر حسب میلی ثانیه میباشد که این تابع تا زمانی که تعیین شده منتظر میماند البته اگر شما تا آن زمان کلیدی را فشار دهید پنجره بسته خواهد شد.

اگر به این تابع 0 پاس دهید این تابع تا زمانی که کلیدی فشرده شود منتظر میماند.

تابع “cv2.destroyAllWindows” تمام پنجره های ساخته شده را خراب میکند که اگر یادتان برورد این عبارت را بنویسید برنامه شما هنگ میکند.

اگر شما بخواهید فقط یک پنجره مشخص را خراب کنید باید از تابع “cv2.destroyWindow”  استفاده کنید .

برای ذخیره کردن عکس در کامپیوتر خود باید ازتابع ()cv2.imwrite استفاده کرد که آرگومان اول آن نام فایل و آرگومان دوم آن عکسی است که میخواهید ذخیره شود برای مثال با نوشتن عبارت “cv2.imwrite(‘output.jpg’, input)” عکس input با اسم output و با فرمت jpg در کامپیوتر ذخیره میشود.

اگر با اجرای این خط کلمه true  چاپ شد یعنی این عکس با موفقیت ذخیره شده.

برای فهمیدن سایزعکس باید از “print (input.shape)” استفاده کنیم که عبارت print هر چه که در پرانتز از آن خواسته شده باشد را چاپ میکند که چون ما سایز عکس خود را میخواهیم باید input.shape را به آن پاس بدهیم. برای مثال این عبارت را چاپ میکند (600, 800, 3) که پارامتر اول آن ارتفاع عکس بر حسب پیکسل و دومی عرض عکس بر حسب پیکسل و سومی کانال های عکس میباشد که در اینجا کانال های عکس 3 میباشد به این معنی است که عکس رنگی میباشد یعنی سه کانال RGB را داراست و اگر کانال سوم 0 بود یعنی عکس سفید سیاه (grayscale) میباشد به صورت زیر:

 

تغییر فضای رنگی

در opencv بیشتر از 150 متد تبدیل فضای رنگی وجود دارد.

برای تبدیل کردن فضای رنگی از تابع “cv2.cvtcolor(input_image , flag)” استفاده میشود که flag نوع تبدیل را تعیین میکند.

برای تبدیل BGR به Gray از  فلگ “cv2.COLOR_BGR2GRAY”  استفاده میشود و همچنین برای تبدیل Gray به BGR از فلگ “cv2.COLOR_GRAY2BGR”  استفاده میشود.

 

یک فضای رنگی مفید دیگر HSV میباشد.

برای HSV رنج Hue برابر [0,179] و رنج  saturation برابر [0,255] و رنج Value برابر [0,255] میباشد.

برای تبدیل BGR به HSV از فلگ  “cv2.COLOR_BGR2HSV”  استفاده میشود.

با این تبدیل ما میتوانیم یک شی رنگی استخراج کنیم.در HSV فهمیدن یک رنگ خیلی آسون تر از فضای رنگی RGB میباشد.

تصویر زیر یک تصویر HSV میباشد.

تصویر زیر کانال Hue میباشد.

تصویر زیر کانال saturation میباشد.

تصویر زیر کانال Value میباشد.

فوتر سایت

اسلایدر سایدبار

درباره ما

درباره ما

ما گروهی از دانشجویان رشته کامپیوتر دانشگاه شهید رجایی هستیم که به راهنمایی و تدریس استاد علی‌رضا اخوان‌پور به دنیای یادگیری عمیق پا گذاشتیم و دوست داریم چیزهایی که در این مسیر یادمی‌گیریم رو به اشتراک بذاریم.

شبکه های اجتماعی