نوشته‌ها

image -processing-python-opencv

تغییر فضاهای رنگ- opencv

۱- تغییر فضاهای رنگ- opencv
۲- HSV
۲-۱ Hue
۲-۳ Value
۲-۴ Saturation or intensity
۲-۵ HSV چه کاربردی دارد؟
۲-۵ استخراج سه شی رنگی از تصویر
۲-۵ برای پیدا کردن مقادیر HSV چکار باید کرد؟
۳- Grayscale


تغییر فضاهای رنگ

 

در این آموزش،  نحوه ی  تبدیل تصاویر از یک فضای رنگی به دیگری را  یاد خواهیم گرفت. مانند: BGR \leftrightarrowGray, BGR \leftrightarrow HSV. علاوه بر این، یک برنامه ایجاد می کنیم که ۳ شیء رنگی را از یک تصویر استخراج کند، و در ادامه به تصاویر خاکستری می پردازیم. در OpenCV، بیش از ۱۵۰ روش تبدیل فضای رنگ وجود دارد. اما تنها دو مورد که بیشتر مورد استفاده قرار می گیرند، به BGR ↔ Gray و BGR ↔ HSV را توضیح می دهیم .


برای تبدیل رنگ، از تابع (cv2.cvtColor (input_image، flag استفاده می کنیم که در آن پرچم، نوع تبدیل را تعیین می کند.

برای تبدیل  BGR →Gray،   از پرچم cv2.COLOR_BGR2GRAY و برای BGR → HSV، از پرچم cv2.COLOR_BGR2HSV استفاده می کنیم. .
برای دریافت پرچم های دیگر، فقط دستورات زیر را در ترمینال پایتون خود اجرا کنید:

import cv2
flags = [i for i in dir(cv2) if i.startswith('COLOR_')]
print flags

 (HSV)

یک فضای رنگی مناسب، مدل رنگی HSV است. همانطور که گفتم قراره اشیاء داخل یک تصویر را  از آن جدا کنیم. تشخیص یا استخراج اشیاء در خیلی جاها از جمله کنترل وسایل نقلیه و  ترافیک کاربرد دارد. در واقع در این مدل، دو ویژگی روشنایی و شدت نور، کمک زیادی می کند. این مدل، دارای سه ویژگی متمایز است:

Hue


نام رنگ (زرد، سبز، صورتی و..) . 

Value

 

روشنایی یا تیرگی رنگ (خاکستری)



Saturation or intensity

 اشباع یا شدت نور  : خلوص رنگ، روشنایی یا تاریکی ( طیف رنگی قرمز).

 

نکته

در فضای رنگ HSV، محدوده رنگ [۰،۱۷۹]، محدوده اشباع [۰،۲۵۵] و محدوده مقدار [۰،۲۵۵] است. نرم افزار های مختلف از مقیاس های مختلف استفاده می کنند. بنابراین اگر مقادیر OpenCV را با آنها مقایسه کنید، باید این محدوده ها را نرمال کنید.

مدل رنگ HSV چه کاربردی دارد؟

 مثلا اگر  بخواهیم  قطعاتی از یک تصویر که در محدوده رنگ آبی یا  قرمز یا سبز  قرار دارند را شناسایی کنیم از این مدل استفاده می کنیم.

در HSV، رنگ آمیزی ساده تر از BGR رنگی است. 

 

 

hsv

 

hsv
hsv
hsv

HSV

 

استخراج سه شی رنگی از تصویر

رسیدیم به برنامه ای که در ابتدای این بخش به آن اشاره کردیم. در واقع قراره یک جوررایی اشیا را ردیابی کنیم.  الگوریتم، به صورت زیر است:

  1. برنامه،  تصویر را بگیرد
  2. تبدیل از فضای رنگ BGR به HSV انجام دهد.

 

ما تصویر HSV را برای طیف وسیعی از رنگ آبی وقرمز و سبز، آستانه گذاری(در جلسات بعدی آموزش داده می شود.) می کنیم:

در حال حاضر تنها ۳ شیء آبی و سبز و قرمز را استخراج می کنیم، می توانیم هر آنچه را که می خواهیم انجام دهیم.
کد:

 

import cv2
import numpy as np
img = cv2.imread('bgrtohsv.png')
#تبدیل فضای رنگ bgr to hsv
hsv = cv2.cvtColor(img,cv2.COLOR_BGR2HSV )

lower_blue = np.array([110,50,50])
upper_blue = np.array([120,255,255])

lower_green = np.array([50,50,50])
upper_green = np.array([60,255,255])

lower_red = np.array([0,50,50])
upper_red = np.array([0,255,255])
#آستانه گیری(cv2.inRange())
maskb = cv2.inRange(hsv, lower_blue, upper_blue)
maskg = cv2.inRange(hsv, lower_green, upper_green)
maskr = cv2.inRange(hsv, lower_red, upper_red)
# and تصویر اصلی با ماسک
#میشود (cv2.bitwise_and())
resb = cv2.bitwise_and(img,img, mask= maskb)
resg = cv2.bitwise_and(img,img, mask= maskg)
resr = cv2.bitwise_and(img,img, mask= maskr)

cv2.imshow('original image',img)
cv2.imshow('maskb',maskb)
cv2.imshow('maskg',maskg)
cv2.imshow('maskr',maskr)

cv2.imshow('resb',resb)
cv2.imshow('resg',resg)
cv2.imshow('resr',resr)

cv2.waitKey()
cv2.destroyAllWindows()

rgb-hsv

استخراج سه شی رنگی از تصویر

 

نکته

 نویز کمی در تصویر وجود دارد. خواهید دید که چگونه آنها را در قسمت های  بعد حذف می کنیم. این ساده ترین روش در ردیابی شی است.

 

برای پیدا کردن مقادیر HSV چکار باید کرد؟

بسیار ساده است و شما می توانید از همان تابع ()cv2.cvtColor  استفاده کنید.

برای مثال، برای پیدا کردن مقدار HSV سبز، دستورات زیر را در ترمینال پایتون امتحان کنید:

green = np.uint8([[[0,255,0 ]]])
hsv_green = cv2.cvtColor(green,cv2.COLOR_BGR2HSV)
print hsv_green
[[[ ۶۰ ۲۵۵ ۲۵۵]]]

اکنون شما می توانید [H-10، ۱۰۰،۱۰۰] و [H + 10، ۲۵۵، ۲۵۵] را به ترتیب پایین تر و بالاتر محدوده رنگ  قرار دهید.

به غیر از این روش، می توانید از هر ابزار ویرایش عکس مانند GIMP یا هر مبدل آنلاین برای پیدا کردن این ارزش ها استفاده کنید.

اما فراموش نکنید که محدوده های HSV را تنظیم کنید.

 

تصاویر Grayscale(خاکستری)

دوربین های قدیمی فقط  قادر به نمایش تصاویر مونوکروم  یا تک رنگ  بودند. درکل سنسور دوربین تنها شدت نور را ثبت میکند که شدت نور طیفی خاکستری ایجاد میکند.

ما با تصاویر خاکستری که نوعی از تصاویر مونوکروم هستند،  کار خواهیم کرد.

Grayscale

http://hamamatsu.magnet.fsu.edu

تصاویر خاکستری فقط دارای یک کانال رنگی(۸بیتی) در مقیاس ۰ تا ۲۵۵ هستند که نشان دهنده روشنایی آن پیکسل است، ۰ کاملا تاریک (سیاه) و ۲۵۵ کاملا روشن (سفید) است.

Grayscale

Grayscale

 

وقتی فیلتر های رنگی بر روی سنسور دوربین قرار میگیرد به ازای هر رنگ قرمز ، ابی  یا سبز ،  یک شدت  نور جدا (خاکستری) درست  می کنند که با ترکیب آنها با هم عکس های رنگی ایجاد می شوند.

تصویر زیر مثال خیلی خوبی  از کانال های مختلف تصویر رنگی است، که با یکی از نرم افزار های ویرایش عکس که من از gimp استفاده کردم را ببینید.  در واقع با ترکیب کانال های سمت راست، تصویر رنگی سمت چپ ایجاد می شود:

مثلا به رنگ سبز دقت کنید، فقط قسمتی که رنگ سبز داریم سفید وبقیه قسمت ها سیاه است. کانال سبز  یک کانال ۸ بیتی که به صورت   [0,255,0]:rgb مقدار دهی می شود و نشان دهنده ی این است که هر چه شدت نور به سمت ۲۵۵ باشد رنگ سبز بیشتر و هر چه به سمت ۰ باشد رنگ سبز کمتری داریم و در مورد کانال های دیگر هم همین استدلال را میشه کرد.

Grayscale

Grayscale

تبدیل تصویر به مقیاس خاکستری به ما یک  آرایه  دو بعدی و تنها یک کانال که ۸ بیت باشد  میدهد. یک جورایی پردازش راحتر و سریع تر و زوم روی یک کانال خاص است.

import numpy as np
import cv2
import matplotlib.pyplot as pltimg = cv2.imread('test.jpg')
gray_img = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
#تصویر خاکستری به عنوان آراه ای دوبعدیprint(gray_img)
[[۲۵۰ ۲۵۰ ۲۵۰ ..., ۲۵۰ ۲۵۰ ۲۵۰]
[۲۵۰ ۲۵۰ ۲۵۰ ..., ۲۵۰ ۲۵۰ ۲۵۰]
[۲۵۰ ۲۵۰ ۲۵۰ ..., ۲۵۰ ۲۵۰ ۲۵۰]
...,
[۲۵۰ ۲۵۰ ۲۵۰ ..., ۲۵۰ ۲۵۰ ۲۵۰]
[۲۵۰ ۲۵۰ ۲۵۰ ..., ۲۵۰ ۲۵۰ ۲۵۰]
[۲۵۰ ۲۵۰ ۲۵۰ ..., ۲۵۰ ۲۵۰ ۲۵۰]]
print (gray_img.shape)</span>
(۶۴۰, ۶۴۰)
print (img.dtype)
uint8

و در نهایت تبدیل به تصویر خاکستری:

import numpy as np
import cv2
import matplotlib.pyplot as plt
img = cv2.imread('test.jpg')
gray_img = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
plt.imshow(cv2.cvtColor(gray_img, cv2.COLOR_GRAY2RGB))
plt.show()
grayscale

تبدیل به تصویر خاکستری

 



۱-پردازش تصویر با پایتون-OpenCV
۲-آموزش نصب pip در پایتون
۳-
کتابخانه های مورد نیاز پردازش تصویر
۴ – خواندن و نمایش فرمت تصویر در پایتون
۵- نمایش تصویرRGB با Matplotlib و تابع تبدیل ()cvtColor در OpenCv

۶-تغییر فضاهای رنگ- opencv
۷-تقسیم و ادغام کانال های تصویری با opencv

 


image -processing-python-opencv

خواندن و نمایش و نوشتن تصویر در پایتون

۱- پردازش تصویر چیست؟
۲- فرمت تصویر
۳ – نمایش فرمت تصویر
۴ – کانال
۵- خواندن یا وارد کردن تصویر
۶ – نمایش تصویر در OpenCv
۷ – نوشتن یا ذخیره تصویر در OpenCV
۷-۱ – فشرده سازی تصویر
۷-۲ – تصاویر رستری
۷-۳ – تصاویر برداری


پردازش تصویر چیست؟

باعث خوشحالیه که با سوفرا، همراه هستید. پردازش تصویر، فرایند دستکاری یا انجام عملیات بر روی تصاویر، برای دستیابی به یک اثر معین (ایجاد یک تصویر سیاه و سفید به عنوان مثال) یا گرفتن اطلاعاتی از یک تصویر(مانند شمردن تعداد دایره ها یا مربع ها ) توسط  یک کامپیوتر  است.

 

شروع کار پردازش تصویر  با  ایمپورت ها است. ما از کتابخانه های  cv2، numpy و کمی از matplotlib (اغلب به عنوان یک روش راحت برای نمایش تصاویر) استفاده می کنیم .

matplotlib : کتابخانه ای برای رسم نمودارها

matplotlib.pyplot: هر تابع pyplot باعث تغییراتی در شکل می شود: به عنوان مثال شکلی را  می گیرد،  یک منطقه ترسیم در شکل ایجاد می کند،   چند خط در یک منطقه  از شکل ترسیم میکند،  شکل را با برچسب و غیره تزئین می کند و … .

NumPy : کتابخانه ای  برای محاسبات علمی با پایتون است. این شامل موارد زیر است:
۱) یک آبجکت آرایه n بعدی قدرتمند

۲) ابزاری برای ادغام C / C ++ و کد Fortran 

۳) …..

import cv2,matplotlib
import numpy as np
import matplotlib.pyplot as plt

فرمت تصویر

 

بسيار خوب! ما نیاز داریم تصاویر را بخوانیم تا فرمتی که آنها نشان میدهند را بفهمیم.در OpenCv تصاویر به صورت زیر آرایه ۳ بعدی numpy نمایش داده می شوند. یک تصویر رنگی  از ردیف های پیکسل تشکیل شده و هر پیکسل با آرایه ای از مقادیر رنگ نمایش داده می شود.

BGR

BGR

 

نمایش فرمت تصویر

(اساسا یک آرایه ۳ بعدی از اطلاعات رنگ پیکسل، در قالب BGR):

print( img)
[[[۱۸۳ ۱۸۳ ۱۸۳][۱۰۲ ۱۰۲ ۱۰۲][۱۰۲ ۱۰۲ ۱۰۲]..., [۱۰۲ ۱۰۲ ۱۰۲][۱۰۲ ۱۰۲ ۱۰۲][۱۰۲ ۱۰۲ ۱۰۲]]

[[۱۰۲ ۱۰۲ ۱۰۲][۱۹۳ ۱۹۳ ۱۹۳][۲۵۳ ۲۵۳ ۲۵۳]..., [۱۶۸ ۱۶۸ ۱۶۸][۲۵۴ ۲۵۴ ۲۵۴][۱۹۳ ۱۹۳ ۱۹۳]]
[[۲۵۳ ۲۵۳ ۲۵۳][۲۵۲ ۲۵۲ ۲۵۲][۲۵۲ ۲۵۲ ۲۵۲]..., [۱۶۷ ۱۶۷ ۱۶۷][۲۵۳ ۲۵۳ ۲۵۳][۲۵۲ ۲۵۲ ۲۵۱]]
..., [[۲۵۵ ۲۵۵ ۲۴۷][۲۵۵ ۲۵۵ ۲۴۷][۲۵۴ ۲۵۴ ۲۵۱]..., [ ۶۸ ۶۲ ۵۶][۲۰۲ ۱۹۷ ۱۹۱][۱۳۶ ۱۲۳ ۱۰۹]]
[[۲۵۵ ۲۵۵ ۲۴۷][۲۵۵ ۲۵۵ ۲۴۶][۲۵۵ ۲۵۵ ۲۵۰]..., [۱۲۱ ۱۱۶ ۱۱۱][۱۸۶ ۱۷۹ ۱۷۳][۱۲۱ ۱۱۰ ۹۷]]
[[۲۵۵ ۲۵۵ ۲۴۴][۲۵۵ ۲۵۵ ۲۴۳][۲۵۵ ۲۵۵ ۲۴۶]..., [۱۷۸ ۱۷۲ ۱۶۶][۱۴۵ ۱۳۶ ۱۲۷][۱۰۷ ۹۶ ۸۴]]]  

اینجا [ ۱۴۵ ۱۳۶ ۱۲۷] و… ، مقادیر یک پیکسل، آبی، قرمز و سبز (BGR) هستند. توجه داشته باشید که OpenCV به طور پیش فرض یک تصویر را در قالب BGR بارگذاری می کند.

 

کانال 

در تصاویر رنگی هر پیکسل دارای ۳ زیر پیکسل است که به هر کدام از این زیر پیکسل ها کانال گفته میشود. یعنی الان در تصویر بالا ما سه کانال آبی، قرمز و سبز  که توسط آرایه نمایش داده  شده است ، داریم.


خواندن یا وارد کردن تصویر

BGR-RGB

تصویر اصلی

 

import numpy as np 
import cv2
img = cv2.imread('test.jpg') 
print(img)

برای خواندن تصویر در opencv، از تابع imread استفاده می کنیم. آرگومان این تابع آدرس محل ذخیره تصویر است. 

cv2.imread(filename[, flags]) → retval
cv2.imread('test.jpg',0 or 1 or -1)

آرگومان اول نام و محل تصویر  که داخل کوتیشن است.  تصویر باید در داخل پوشه ای باشد که فایل پایتون  در آن قرار  دارد  وگرنه باید مسیر کامل تصویر  نوشته شود.

آرگومان دوم یک پرچم است که مشخص می کند چگونه تصویر را باید خواند.

۱) cv2.IMREAD_COLOR: تصویر رنگی را بارگیری می کند و هر گونه شفافیت تصویر را نادیده می گیرد. این پرچم پیش فرض است:

پرچم بزرگتر از ۰ تصویر رنگی سه کاناله(قرمز، سبز،آبی)  و عمق ۸ بیتی برمیگرداند. BGR

cv2.imread('test.jpg')
or
cv2.imread('test.jpg',1)
or
cv2.imread('test.jpg',cv2.IMREAD_COLOR)

۲) cv2.IMREAD_GRAYSCALE: بارگیری تصویر در حالت خاکستری یک کانال و عمق ۸ بیتی:

cv2.imread('test.jpg',0)

 

۳) cv2.IMREAD_UNCHANGED: تصویر را به عنوان  کانال آلفا بارگیری می کند:

اگر پرچم کوچکتر از ۰ باشد تصویر ۴ کاناله برمیگرداند. تابع وقتی تصویر ۱۶/۳۲ بیتی برمیگرداند که تصویر ورودی دارای یک همچین عمقی باشد وگرنه آ ن را به ۸ بیتی تبدیل میکند

cv2.imread('test.jpg',-1)
or
cv2.imread('test.jpg',cv2.IMREAD_UNCHANGED)

نکته

به جای این سه پرچم، به سادگی می توانید عدد صحیح ۱، ۰ یا -۱ را منتقل کنید.

کد زیر را ببینید:

 import numpy as np
import cv2
img = cv2.imread('test.jpg',0)

 

همانطور که در قطعه کد بالا  ملاحظه میکنید بعد از خواندن تصویر آن را در متغییری به نام img قرار میدهیم. از این متغیر برای نمایش تصویر، نوشتن تصویر و … استفاده میکنیم.

هشدار

حتی اگر مسیر تصویر اشتباه باشد، خطایی نخواهد داشت، اما img  چاپ نمیشود.

img = cv2.imread('test.jpg')

 نمایش تصویر در  OpenCv

 cv2.imshow()

 

از تابع ()cv2.imshow،  برای نمایش تصویر در یک پنجره استفاده می کنیم. پنجره به طور خودکار با اندازه تصویر متناسب می شود. این تابع دو آرگومان دارد. اولین آرگومان نام پنجره است که یک رشته میباشد. آرگومان دوم تصویری است که با خواندن  آن، در یک متغیر ذخیره کردیم. شما میتوانید تعداد بیشتری پنجره با یک تصویر ایجاد کنید ولی باید نام تصاویر متفاوت باشد. 

import cv2
img = cv2.imread('test.png') 
cv2.imshow('opencv',img)
c = cv2.waitKey(0)
cv2.destroyAllWindows()
11

cv2.imshow()

 

 

 

 

Waits for a pressed key(منتظر برای فشار دادن یک کلید ازصفحه کلید).  یک تابع اتصال به  صفحه کلید است. یک آرگومان دارد که زمان در میلی ثانیه است.

cv2.waitKey([delay]) → retval

 

پارامتر ها

delay 

تاخیرزمان به میلی ثانیه . ۰ به عنوان آرگوان ورودی مقدار ویژه ای است به معنای “بی وقفه” است.

اگر  (\texttt{delay}\leq 0 ) باشد یعنی پنجره برای مدت نامحدودی منتظر می ماند تا زمانی یک کلید از صفحه کلید را فشار دهیم و آن بسته شود. 

اگر مقدار delay  مثبت باشد مثلا ۱۰۰۰، بعد از یک ثانیه پنجره به صورت خودکار بسته میشود. 

این تابع یا کد کلید فشار داده شده از صفحه کلید را بر میگرداند یا -۱(یعنی کلیدی  قبل از زمان مشخص فشار داده نشده . برای من ۲۵۵ بر میگرداند.) 

نکته

این تابع زمانی کار میکند که  حداقل یک پنجره

در حالی که OpenCV برای استفاده در برنامه های کاربردی تمام عیار طراحی شده است و می تواند در چارچوب های عملکردی غنی از UI (مانند Qt *، WinForms * یا Cocoa *) یا بدون استفاده از رابط کاربری مورد استفاده قرار گیرد، گاهی اوقات لازم است که سرعت عمل را امتحان و نتایج را تصور کنید. این همان چیزی است که ماژول HighGUI برای آن طراحی شده است.

 

destroyAllWindows

تابع destroyAllWindows تمام پنجره های باز شده HighGUI را از بین می برد.

قطعه کد زیر نشان میدهد که اگر کلیدی فشار داده نشود تصویر بی وقفه نمایش داده میشود، تا زمانی که یک کلید فشار دهیم یا خودمان پنجره را ببندیم.

import cv2
def sufra():
 img = cv2.imread('test.png')
 cv2.imshow('image', img)
 cv2.waitKey(0)
 cv2.destroyAllWindows()
 print ("waitkey")

if __name__ == '__main__':
 sufra()

waitkey

با قطعه کد زیر، فشار دادن یا ندادن کلید از صفحه کلید، کد اسکی آن برگردانده میشود.

۱۰۶ کد اسکی حرف h  میباشد.

import cv2
def sufra():
 img = cv2.imread('test.png')
 cv2.imshow('image', img)
 key=cv2.waitKey(1000)
 cv2.destroyAllWindows()
 print (key)
 print ("waitkey")

if __name__ == '__main__':
 sufra()

۲۵۵
waitkey
۱۰۴
waitKey

در کد  از دستور if استفاده کردیم که فقط با  فشار دادن کلید q،پنجره بسته میشود. 

 

ord()

تابع ()ord یک رشته یا کاراکتر میگرد و کد اسکی آن را بر میگرداند.

import cv2
def sufra():
 img = cv2.imread('test.png')
while True:
 cv2.imshow('image', img)
 if cv2.waitKey(1)  == ord('q'):
 cv2.destroyAllWindows()
 print ("q")
 break;

if __name__ == '__main__':
 sufra()

waitKey

 

() cv2.destroyAllWindows

به راحتی تمامی پنجره هایی که ایجاد کردیم  را از بین می برد. اگر می خواهید پنجره خاصی را از بین ببرید، از تابع ()cv2.destroyWindow  استفاده کنید.

cv2.destroyAllWindows() → None

نکته

یک مورد خاص وجود دارد که شما قبلا می توانید یک پنجره ایجاد کنید و تصویر را بعدا بارگذاری کنید. در این صورت، می توانید مشخص کنید که آیا پنجره قابل اندازه بندی مجدد است یا نه.
  این کار توسط تابع () cv2.namedWindow انجام می شود. به طور پیش فرض، پرچم cv2.WINDOW_AUTOSIZE است.اما اگر شما پرچم را به عنوان cv2.WINDOW_NORMAL مشخص کنید،می توانید پنجره را تغییر دهید. هنگامی که تصویر در ابعاد بزرگ، مفید خواهد بود: 

cv2.namedWindow(winname[, flags]) → None

پارامترها

name : نامی برای پنجره که ممکنه به عنوان شناسه هم استفاه شود

flags(پرچم های پنجره):

WINDOW_NORMAL  :   اگر تنظیم شده باشد، کاربر می تواند پنجره را تغییر دهد (بدون محدودیت).
WINDOW_AUTOSIZE  : اگر تنظیم شده باشد، اندازه پنجره به صورت خودکار براساس تصویر نمایش داده می شود ، و شما نمی توانید اندازه پنجره را به صورت دستی تغییر دهید.
WINDOW_OPENGL اگر  : تنظیم شده باشد، پنجره با پشتیبانی OpenGL ایجاد خواهد شد.

import cv2
img = cv2.imread('test.png')
cv2.namedWindow('image', cv2.WINDOW_NORMAL)
cv2.imshow('image',img)
cv2.waitKey(0)
k=cv2.destroyAllWindows()
print(k)
None

نوشتن یا ذخیره تصویر در OpenCV 

 

cv2.imwrite()


از تابع ()cv2.imwrite  برای ذخیره یک تصویر در یک فایل مشخص شده استفاده میشود.

cv2.imwrite(filename, img[, params]) → retval

پارامتر ها

 

filename : نام  برای فایل انتخاب یکنیم 

image: تصویر  برای ذخیره شدن

تابع imwrite تصویر را در فایل مشخص شده ذخیره می کند. فرمت تصویر بر اساس فرمت نام فایل انتخاب شده است. 

 

فشرده سازی تصویر

قبل از ذخیره کردن تصویر، فشرده سازی  جهت  حذف اطلاعات تکراری، انجام میشود. نوع فایل تصویر یا رستر یا بردار است:

تصاویر رستری 

ساخته شده از پیکسل
تغییر اندازه باعث تغییر در کیفیت تصویر میشد.

فرمت های رایج: jpg، png، gif، tif، bmp

تصاویر برداری

ساخته شده از اشیاء بردار (نه مبتنی بر پیکسل)
می تواند به هر اندازه ای تغییر کند بدون عوض کاه یا افزایش کیفیت
• فرمت های رایج: ai، eps، ps، svg، wmf، pdf

 

vector-raster

Bitmap-vector-raster

https://commons.wikimedia.org/wiki/File:Bitmap_VS_SVG.svg

 

 در پردازش تصویر، تصاویر رستری به کار میرود.

 با استفاده از تابع imwrite،  می توان فقط تصاویر  ۸ بیتی (یا ۱۶ بیت بدون امضای (CV_16U) در حالت تک کانال یا ۳ کانال ( BGR) را ذخیره کرد). ( مانند PNG، JPEG 2000 و TIFF) 

امکان استفاده از این تابع برای ذخیره تصاویر PNG با کانال آلفا وجود دارد.

اگر فرمت، عمق یا کانال متفاوت باشد، قبل از ذخیره آن  از ()cvtColor  استفاده کنید تا  تبدیل کنید. در قسمت بعدی در مورد این تابع توضیح خواهیم داد. 

import numpy as np
import cv2
img = cv2.imread('test.png')
cv2.imshow('image',img)
k = cv2.waitKey(0)
# را فشار بدیم Escاگر
#پنجره بسته میشود
if k == 27: </span>
cv2.destroyAllWindows()
#اگر این حرف را فشار بدهیم تصویر با نام انتخابی ذخیره میشود.
elif k == ord('s'): </span>
cv2.imwrite('save.jpg',img)</span>
cv2.destroyAllWindows()</span>


۱-پردازش تصویر با پایتون-OpenCV
۲-آموزش نصب pip در پایتون
۳-
کتابخانه های مورد نیاز پردازش تصویر
۴ – خواندن و نمایش فرمت تصویر در پایتون
۵- نمایش تصویرRGB با Matplotlib و تابع تبدیل ()cvtColor در OpenCv

۶-تغییر فضاهای رنگ- opencv
۷-تقسیم و ادغام کانال های تصویری با opencv

 


آموزش قبلی

آموزش بعدی