خصوصیت های تصویر با پایتون و OpenCV

در مطلب پیشین مقدمه ای درباره برنامه نویسی کتابخانه OpenCV در پایتون را توضیح دادیم. در این مطلب می خواهیم به شما یاد دهیم که چگونه می توانید خصوصیت های ساده تصویر مانند اندزه و تعداد کانال های آن را بدست آورید. در قطعه کد زیر چگونگی پیدا کردن اندازه و ابعاد تصویر (عرض و ارتفاع) را نشان داده ایم. هر نمونه از کلاس Mat دارای متدی بهنام ()size است که جفت عرض (Width) و ارتفاع (Height) مربوط به تصویر ورودی را برگشت می دهد.


بنابراین در سی پلاس پلاس، شما می توانید از طریق متد ()size همزمان عرض و ارتفاع تصویر را بدست آوید و همچنین به ترتیب از طریق size().width و size().height می توانید عرض و ارتفاع تصویر را بدست آورید و  از متد ()channels باید برای نمایش تعداد کانال های تصویر استفاده کنیم. ولی در پایتون چنین مواردی وجود ندارند. مطابق قطعه کد زیر در پایتون باید از خصوصیت shape از آرایه های NumPy استفاده کنید.


در کد بالا ما چندین مورد را نمایش داده ایم. اولا باید بدانید که خصوصیت shape مربوط به کتابخانه OpenCV نیست بلکه مربوط به تمامی ماتریس هایی (یا آرایه هایی) است که توسط کتابخانه NumPy ایجاد شده اند و می دانید که خروجی متد ()imread یک ماتریس یا نوع numpy.ndarray است. (خط ۴ و ۶).

خصوصیت shape به صورت نوع تاپل پایتون (Tuple) است و خصوصیت shape مربوط به ماتریس های تصویر، به صورت یک تاپل است که دارای سه عنصر است.(خطوط ۸ و ۱۰). عنصر نخست با اندیس صفر تعداد ستون ها (ارتفاع)، عنصر دوم با اندیس یک تعداد سطرها (عرض) و عنصر سوم با اندیس دو تعداد کانال ها را نمایش می دهد. (خطوط ۱۲ تا ۱۴). همچنین آرایه های NumPy داری خصوصیتی به نام size هستند که اندازه تصویر به بایت (Byte) را نشان می دهد. (خطوط ۱۶ و ۱۸) و در نهایت برای پیدا کردن نوع درایه های مارتیس تصویر باید خصوصیت dtype را همانند خطوط ۲۰ و ۲۲ استفاده کنیم.

در کد زیر و توسط ارسال IMREAD_GRAYSCALE با آرگومان دوم متد ()imread، تصویر ورودی را به صورت خاکستری خوانده ایم. به یاد دارید که تصویر های رنگی به صورت سه کانالی و تصویرهای خاکستری به صورت تک کانالی هستند. بنابراین در کد زیر عنصر سوم خصوصیت shape برابر با عدد ۱ ولی درکد بالا چون تصویر همان رنگی پردازش شد، عنصر سوم خصوصیت shape برابر با عدد ۳ است.

خصوصیت shape و متد ()shape در کتابخانه NumPy: تغییر بعدهای آرایه NumPy