در قسمت قبلی ” کار با تصویر در OpenCV ” با نحوه خواندن فایل از ورودی توسط Python + OpenCV آشنا شدیم. حالا میخوایم فایل رو با فرمت های مختلف ذخیره کنیم یا در فایل های تصویری تغییر ایجاد کنیم.
تغییر نوع فایل تصویری در OpenCV چگونه است ؟
خوشبختانه توابع تغییر دهنده فرمت تصاویر به صورت پیشفرض در OpenCV قرار دارند برای تغییر فرمت تصویری ورودی به png می توانید از کد زیر استفاده کنید
import numpy as np
import cv2
img = cv2.imread('D:/P30Script/opencv/03/p30script.jpg')IMWRITE_PNG_COMPRESSION
cv2.imwrite('output.png', img, [cv2.])
خروجی کد:
این تغییر نوع فایل به کمک ImwriteFlag انجام می شود . در این نمونه ما از فشرده ساز PNG استفاده می کنیم. ImwriteFlag به شما اجازه میدهد که فرمت خروجی فایل را تغییر دهید و یا کیفیت فایل را کم و زیاد کنید.
فضای رنگی تصاویر
در دنیای بینایی ماشین و پردازش تصویر فضای رنگی به نحوه خاص سازماندهی تصاویر گفته می شود. یک فضای رنگی در اصل تلفیقی از دو چیز است، مدل رنگی و تابع نگاشت. دلیل این که ما به این مبحث می پردازیم این است که فضا های رنگی به ما کمک میکنند بتوانیم پیکسل ها را توسط تاپل ها باز نمایش دهیم.
فضا های رنگی بسیار وجود دارند که از معروفترین آن ها می توان به RGB ،YUV ،HSV و Lab اشاره کرد. در زمانی که با یک مساله جدید روبرو هستیم. کافی است فضای رنگی مناسب را انتخاب کنیم تا حل مسئله آسان گردد. بزارین با چندتا مثال این فضا ها رو توضیح بدیم.
در OpenCV بالغ بر 190 فضای رنگی در دسترس می باشد برای دیدن این فضا های رنگی، یک فایل پایتون ایجاد کنید و کد زیر رو توش اجرا بگیرید :
import cv2
print([x for x in dir(cv2) if x.startswith('COLOR_')])
Splitting image channels
با اجرای کد بالا ، شما لیستی از امکان ارائه شده از سوی OpenCV برای تغییر فضا های رنگی را مشاهده خواهید نمود.
با استفاده از OpenCV ما می توانیم تقریبا هر فضای رنگی را به فضایی دیگر تغییر دهیم .
با مثالی به استقبال تغییر فضای رنگی تصاویر میرویم ، یک فایل پایتون ایجاد کنید . کد زیر را در آن قرار دهید مسیر فایل که مد نظرتان است را جایگزین مسیر فایل موجود در کد زیر کنید:
import cv2
img = cv2.imread('D:/P30Script/opencv/03/p30script.jpg', cv2.IMREAD_COLOR)
gray_img = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
yuv_img = cv2.cvtColor(img, cv2.COLOR_BGR2YUV)
cv2.imshow('Grayscale image', gray_img)
cv2.imshow('YUV image', yuv_img)
cv2.waitKey()
در کد بالا با استفاده از تابع cvtColor و با مقدار دهی دلخواه رنگبندی تصاویر ورودی را تغییر می دهیم. نتیجه این کد به صورت زیر خواهد بود :
Merging image channels
برای بازی با رنگ های موجود در تصویر ها می توانید آن ها را جداسازی (split ) سپس با یکدیگر ادغام کنید.
هر ترکیبی رنگی می تواند یک تصویر جدید را در اختیار شما قرار دهد. نمونه کد :
import cv2
img = cv2.imread('D:/P30Script/opencv/03/p30script.jpg', cv2.IMREAD_COLOR)
g,b,r = cv2.split(img)
gbr_img = cv2.merge((g,b,r))
rbr_img = cv2.merge((r,b,r))
rgr_img = cv2.merge((r,g,r))
cv2.imshow('Original', img)
cv2.imshow('RBR', rbr_img)
cv2.imshow('RGR', rgr_img)
cv2.waitKey()
خروجی کد به صورت زیر خواهد بود :
با ما در ادامه پست های کار با تصویر در OpenCV_Python همراه باشید.