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

.

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


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

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

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

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

تصویر اصلی
تصویراصلی

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

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

خروجی:

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

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

 

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

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

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


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


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

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

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

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


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

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


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

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

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

نکته


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

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

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

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()

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

 

 

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

مهارت ها: html,css,C#,ADO.NET,sqlserver,access,python javascript,php

نوشته های مرتبط

1 نظر

نظری بگذارید

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