Region Of Interest در OpenCV با پایتون

ناحیه علاقه یا ناحیه مطلوب (Region of Interest) که از این پس آن را ROI می نامیم، محدوده ای مستطیلی شکل است که می خواهیم از درون تصویر انتخاب کنیم. در مطلب دسترسی به پیسکل ها در پایتون و OpenCV در مورد پویش و دسترسی به پیکسل های تصویر اشاره کرده ایم و در این مطلب می خواهیم از همان مفهوم و همچنین از طریق متدی به نام ()selectROI در OpenCV نیز می توانیم این کار را انجام دهیم.

در کد زیر تصویری (منبع تصویر) را خوانده ایم و سپس توسط اسلایس بندی ماتریس های (آرایه های) NumPy بازه ای از آنرا انتخاب کردیم. این بازه شامل ستون ۹۰ تا ۲۰۰ و سطرهای ۹۰ تا ۴۰۰ می شود. سپس رنگ (255, 191, 0)RGB را به آن انتساب می دهیم ولی توجه کنید که عددهای درون تاپل مربوط به تعریف رنگ باید وارونه و به صورت BGR انتساب داده شوند.

متد ()selectROI در OpenCV با پایتون

در کد بالا کار ویژه ای را انجام ندادیم زیر به صورت غیر قابل اعتماد و غیر کاربردی ناحیه ای از پیکسل ها را احتمالا به صورت تصادفی انتخاب کرده ایم، در حالی که اگر می خواهیم انتخاب ناحیه ای از تصویر یا ویدیو به صورت دستی و از طریق ماوس انجام شود. OpenCV برای این منظور متدی به نام ()selectROI را فراهم کرده است. این متد از طریق در اختیار گذاشتن یک واسط گرافیکی GUI اجازه می دهد از طریق ماوس، ناحیه مطلوب یا ROI را انتخاب کنید. الگوی کلی آن در پایتون به صورت زیر است.

در کد زیز می خواهیم ناحیه ای را توسط ماوس و متد ()select انتخاب کنیم تا در نهایت رنگ تمامی پیکسل های آن ناحیه را آبی رنگ کنیم. پس همانند خط ۶ از کد زیر متد ()selectROI به همراه مقدار آرگومان هایش فراخوانی شده است. آرگومان نخست یک رشته و نام پنجره ای را تعیین می کند. آرگومان دوم نام متغیری است که به ماتریس تصویر اصلی اشاره دارد.

آرگومان سوم showCrosshair نام دارد واستفاده از آن اختیاری و مقدار پیش فرض آن True است. اگر مقدار showCrosshair برابر با False باشد، پس تنها یک مستطیل خالی نمایش داده می شد. آرگومان چهارم fromCenter نام دارد و استفاده از آن اختیاری و مقدار پیش فرض آن False است. اگر مقدار آن برابر Flase باشد، پس شما مستطیل آبی رنگ در شکل های زیر را از گوشه سمت راست بالا، به گوشه سمت چپ پایین می کشید ولی اگر مقدار آن برابر با True باشد، پس مستطیل از مرکز به بیرون کشیده می شود.


پس از اینکه کد زیر را اجرا می کنید، در خط فرمان پیغام شکل زیر نشان داده می شود که به شما می گوید ابتدا با حرکت ماموس و ایجاد مستطیل آبی رنگ، ناحیه ROI را انتخاب کنید و سپس یکی از کلیدهای Space یا Enter را کلیک کنید تا در نتیجه مختصات گوشه سمت بالا ناحیه ROI و مختصات گوشه سمت چپ پایین ROI همانند شکل زیر پیدا شود. توجه کنید گفتیم که ناحیه ROI به صورت یک مستطیل است.

سپس مطابق خط ۱۰ از کد بالا که در زیر نیز نوشته شده است، می خواهیم رنگ آبی را به ناحیه ROI انتخاب شده انتساب دهیم تا در نهایت مطابق شکل زیر رنگ تمامی پیکسلهای درون ROI به رنگ ابی تغییر کند و در نهایت تصویر به همراه ناحیه ROI توسط متد ()imshow نشان داده می شود.

برداشتن بخشی از تصویر توط متد ()selectROI در OpenCV با پایتون

Crop یا برداشتن و برش بخشی از تصویر به این اشاره دارد که ناحیه ای از تصویر (ROI) را انتخاب و سپس پیسکل های انتخاب شده ROI را درون یک متغیر جدید ذخیره و در نهایت یک تصویر جدید از آن ایجاد کنیم. قطعه کد زیر این مورد را نشان می دهد. توجه کنید که تفاوت تنها در خط ۱۰ کد زیر و کد بالا است. در خط ۱۰ از کد زیر به جای اینکه رنگ را به پیکسل ها انتساب دهیم، خود پیکسل ها را درون یک متغیر جدید ریخته و سپس تصویر این متغیر را توسط متد ()imshow نمایش داده ایم. البته شما می توانستید توسط متد ()imwrite این تصویر جدید را بر روی دیسک بنویسید.