پردازش تصویر با پایتون قسمت نهم

.

نمایش تصویرRGB با Matplotlib

[gap height=”19″]

[gap height=”19″]

ما می دانیم که matplotlib ، کتابخانه پایتون برای کار با نمودارها و ارقام است. اما اگر می خواستیم یک تصویر ساده RGB را نمایش دهیم چه؟ آیا می توانیم با matplotlib انجام دهیم؟

در این قسمت مابه شما نشان می دهیم که چگونه یک تصویرRGB   را با matplotlib فقط در چند خط کد  میشه نشان داد و هرگونه ابهاماتی را که هنگام استفاده از OpenCV و matplotlib وقتی با هم اجرا میشوند، مواجه می شوید روشن کنید.

یک تصویر RGB، که گاهی اوقات به عنوان یک تصویر رنگی واقعی نامیده می شود، به صورت یک آرایه سه بعدی  داده m × n × ۳ ذخیره می شود که کانالهای قرمز، سبز و آبی رنگ را برای هر پیکسل تعریف می کند. رنگ هر پیکسل با ترکیبی از فرمت های فایل های گرافیکی تصاویر RGB، به عنوان تصاویر ۲۴(۸*۳) بیتی ذخیره می شود، حال آنکه هر کدام از کانالهای قرمز، سبز و آبی ۸ بیت هستند.

در این قسمت میخواهیم یک تصویر را با OpenCV می خوانیم وبا   matplotlibنمایش میدهیم.

[gap height=”19″]

تصویر اصلی

تصویراصلی

[gap height=”19″]

کد زیر فقط از opencv برای خواندن و نمایش تصویر استفاده  کرده است.

[gap height=”19″]

import numpy as np
import cv2
img = cv2.imread('test.png')
cv2.imshow('opencv',img)
cv2.waitKey (0)
cv2.destroyAllWindows ()

[gap height=”19″]

خروجی:

11

نمایش تصویر با استفاده از opencv

[gap height=”19″]

در کد زیر هم فقط از matplotlib برای خواندن و نمایش تصویر  استفاده شده است.

 [gap height=”19″]

import matplotlib.pyplot as plt
import matplotlib.image as mpimg
image = mpimg.imread("img2.png")
plt.imshow(image)
plt.show()

[gap height=”19″]

اولین کاری که ما انجام می دهیم این است که کتابخانه matplotlib را وارد کنیم.

ولی ما فقط از یک قسمتی از این کتابخانه مربوط به خواندن تصویر است به عنوان mpimg  ، که جایگزین  matplotlib.image،  همچنین از plt که جایگزین matplotlib.pyplot است  برای نمایش استفاده کردیم.

ما می توانیم تصویر زیر را ببینیم:

[gap height=”19″]

12

نمایش تصویر با استفاده از matplotlib با محور دور تصویر

[gap height=”19″]

در مورد خلاص شدن از محور  و اعداد از کد زیر استفاده میکنیم:

plt.axis(“off”)
plt.imshow(image)
plt.show()
 
 

خواندن تصویر با opencv و نمایش آن توسط matplotlib :

[gap height=”19″]

import cv2
import matplotlib.pyplot as plt
image = cv2.imread("img2.png") 
 plt.axis("off") 
plt.imshow(image)
plt.show() 

[gap height=”19″]

اما نتیجه انتظار نمی رفت تصویر زیر باشد:

[gap height=”19″]

13

خواندن تصویر با opencv و نمایش آن توسط matplotlib

[gap height=”19″]

چرا نتیجه مورد انتظار نیست؟

پاسخ به عنوان یک نکته در opencv نهفته است.

[gap height=”10″]

نکته

[gap height=”10″]

فرمت رنگ پیش فرض در OpenCV اغلب به عنوان RGB نامیده می شود اما در واقع BGR است (بایت ها معکوس می شوند).

  بنابراین بایت اول یک تصویر استاندارد ۲۴ بیتی  ۸ بیتی،  آبی ، بایت دوم سبز  و بایت سوم قرمز خواهد بود. بایت های چهارم، پنجم و ششم پیکسل دوم (آبی، سپس سبز، سپس قرمز)، و غیره

OpenCV تصاویر RGB را به عنوان آرایه های چند بعدی Numpy معرفی می کند … اما به ترتیب معکوس! به این معنی که تصاویر در واقع به جای فضای RGBدر فضای  BGR  نشان داده و ذخیره  شده است!

پس چگونه این مسئله را حل کنیم؟

هرچند که ثابت است اما همه ما باید انجام دهیم. تصویر را از BGR به RGB   تبدیل   میکنیم:

[gap height=”19″]

import numpy as np
 import matplotlib.pyplot as plt
 import cv2
img = cv2.imread('img2.png')
temp = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
 plt.imshow(temp)
plt.imshow(temp)
plt.axis('off')
plt.show()

[gap height=”19″]

نتیجه اسکریپت ما نشان می دهد که رنگ های تصویر ما درست است.

0 پاسخ

دیدگاه خود را ثبت کنید

تمایل دارید در گفتگوها شرکت کنید؟
Feel free to contribute!

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *