تبدیل RGB به HSV
به نام خدا و با سلام
در برخی از پست های قبلی در مورد پردازش تصویر، دیدیم که در اغلب اوقات برای راحتی پردازش، تصویر رنگی را از حالت BGR یا RGB به حالت HSV تبدیل می کردیم و سپس از دستور cv2.inRange برای پیدا کردن رنگ ها در یک محدوده دلخواه استفاده می کردیم. برخی از افراد به هنگام پیدا کردن محدوه رنگ دچار مشکل می شدند و نمی توانستند به درستی حد بالا (upper) و حد پایین (lower) را پیدا کنند. به همین دلیل تصمیم گرفتم در این پست یک روش ابداعی توسط خودم را آموزش بدهم که به راحتی و با دقت بسیار بسیار فراوان بتوانید حدود بالا و پایین را پیدا کنید. اجازه دهید شروع کنیم.
ابتدا وارد وب سایت www.codebeautify.org شوید. صفحه زیر نمایش داده خواهد شد.
در سمت چپ صفحه، شما رنگ ها را تعیین می کنید. سمت راست صفحه، رنگ انتخاب شده را نمایش خواهد داد و در وسط صفحه مقادیر RGB و معادل HSV نشان داده می شوند. با انتخاب رنگ در سمت چپ صفحه، مقادیر RGB و HSV به طور خودکار محاسبه می شوند. با یک مثال روند کار را آموزش خواهم داد.
فرض کنید می خواهیم در یک تصویر فقط رنگ سبز را شناسایی کنیم. پس باید محدوده ای برای رنگ سبز پیدا کنیم. ابتدا حد پایین را پیدا می کنیم. برای این کار در سمت چپ صفحه، و در ستون رنگی بالاترین محدوده رنگ سبز را انتخاب کنید. سپس در مربع کنار آن دایره کوچک را بر روی تیره ترین سبز ممکن قرار دهید مانند شکل زیر.
و در وسط صفحه مقدار RGB این رنگ را محاسبه می کند.
خب تا اینجا حد پایین محدوده رنگ سبز را پیدا کردیم. اکنون می خواهیم حد بالا را پیدا کنیم. همین روند را بر عکس انجام می دهیم؛ یعنی ستون رنگی سمت چپ را روی پایین ترین رنگ سبز قرار می دهیم و در مربع کنار آن روشن ترین رنگ سبز را انتخاب می کنیم. شکل زیر روند این کار را نشان می دهد.
و برای مقادیر کانال های R و G و B داریم:
به همین سادگی حدود بالا (upper) و پایین (lower) را برای قرار دادن در دستور cv2.inRange بدست آوردیم.
با تشکر از دوست خوبمون آقای خوش نظر