اهداف آموزش کار با تصاویر در OpenCV-Python
- در قسمت از آموزش کار با تصاویر در OpenCV-Python نحوه خواندن یک تصویر، نحوه نمایش آن و نحوه ذخیره آن را خواهید آموخت.
- شما این توابع را یاد خواهید گرفت: ()cv2.imread()، cv2.imshow()، cv2.imwrite.
[divider height=”30″ style=”default” line=”default” themecolor=”1″]
خواندن تصاویر
از تابع ()cv2.imread برای خواندن یک تصویر استفاده کنید. تصویر باید در دایرکتوری باشد که درون آن هستید یا اینکه مسیر کامل تصویر باید داده شود.
این تابع دو آرگومان ورودی می گیرد اولی اجباری و دومی اختیاری است. آرگومان اول آدرس تصویر و دومی نحوه بارگذاری تصویر است که میتواند سه حالت زیر باشد :
-1 : (منفی 1) بارگیری یک تصویر رنگی هر گونه شفافیت (transparently) تصویر را نادیده گرفت می شود. این مقدار پیش فرض است.
0 : (صفر) بارگیری تصویر در حالت سیاه و سفید
1 : (یک) تصویر را به حالت آلفا بارگیری می کند
کد زیر یک عکس رنگی را در قالب سیاه و سفید برای ما بارگذاری می کند و در متغیر img می ریزد.
import numpy as np
import cv2
# Load an color image in grayscale
img = cv2.imread('messi5.jpg',0)
[alert style=”warning”]
“توجه” اگر مسیر عکس اشتباه باشد هیچ خطایی رخ نخواهد داد ولی زمان فراخوانی تصویر به شما یک None خواهد داد .
[/alert]
نمایش یک تصویر
از تابع ()cv2.imshow برای نمایش یک تصویر در یک پنجره استفاده می شود. پنجره به طور خودکار به اندازه تصویر باز می شود.
این تابع هم دو آرگومان ورودی می گیرد، اولین یک نام برای پنجره ای است که باز می شود که یک مقدار رشته ای است. آرگومان ورودی دوم تصویر ما است. شما می توانید هر تعداد پنجره به نمایش بگذارید فقط باید نامشان باهم فرق کنند.
cv2.imshow('image',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
تصویر زیر نمایش داده می شود
()cv2.waitKey در OpenCV-Python یک تابع است برای اتصال صفحه کلید. آرگومان ورودی آن زمان به میلی ثانیه است. این عملکرد برای هر رویداد صفحه کلید به میلی ثانیه مشخص شده منتظر می ماند. اگر در آن زمان هر کلید را فشار دهید، برنامه ادامه می یابد. اگر 0 به عنوان ورودی منتقل شود، برای یک سیکل، کلیدی به طور نامحدود منتظر می ماند. همچنین می توان برای تشخیص کلید های خاص استفاده شود، مثلا اگر کلید a فشار داده شده و غیره که در زیر توضیح می دهیم.
()cv2.destroyAllWindowsبه سادگی تمام پنجره هایی که ایجاد کرده اید را از بین می برد. اگر می خواهید پنجره خاصی را از بین ببرید، از تابع ()cv2.destroyWindow استفاده کنید و در آن نام دقیق پنجره را به عنوان آرگومان منتقل کنید.
در OpenCV-Python یک مورد خاص وجود دارد که شما قبلا می توانید یک پنجره ایجاد کنید و تصویر را بعدا بارگذاری کنید. در این صورت، می توانید مشخص کنید که آیا پنجره قابل اندازه بندی مجدد است یا نه. این کار با عملکرد ()cv2.namedWindow انجام می شود. به طور پیش فرض، پرچم cv2.WINDOW_AUTOSIZE است. اما اگر شما پرچم را به عنوان cv2.WINDOW_NORMAL مشخص کنید، می توانید پنجره را تغییر دهید. این ویژگی زمانی مفید خواهد بود که تصویر در ابعاد خیلی بزرگ باشد.
کد زیر را ببینید :
cv2.namedWindow('image', cv2.WINDOW_NORMAL)
cv2.imshow('image',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
ذخیره یک تصویر
از تابع cv2.imwrite() برای ذخیره یک تصویر استفاده میشود. و دو آرگومان برای ورودی دریافت می کند.
اولین آرگومان نام فایل است، آرگومان دوم تصویری است که می خواهید ذخیره کنید.
cv2.imwrite ('aramweb.png'، img)
این کد تصویر را در قالب PNG در دایرکتوری جاری ذخیره می کند.
خلاصه این که :
برنامه یک تصویر را به صورت خاکستری بارگیری می کند، آن را نمایش می دهد، اگر شما فشار ‘s’ را فشار دهید ، تصویر را ذخیره میکند و خارج میشود، و یا اگر کلید Esc را بزنید بدون ذخیره کردن از برنامه خارج می شود.
import numpy as np
import cv2
img = cv2.imread('aramweb.jpg',0)
cv2.imshow('image',img)
k = cv2.waitKey(0)
if k == 27: # wait for ESC key to exit
cv2.destroyAllWindows()
elif k == ord('s'): # wait for 's' key to save and exit
cv2.imwrite('aramweb.png',img)
cv2.destroyAllWindows()
[alert style=”warning”]
هشدار : اگر از OpenCV-Python در یک دستگاه 64 بیتی استفاده می کنید. مجبورید خط (0)k = cv2.waitKey را به صورت زیر تغییر دهید: k = cv2.waitKey(0) ,0xFF
[/alert]
استفاده از Matplotlib
Matplotlib کتابخانه رسم برای پایتون است که به شما انواع مختلفی از روش های رسم می دهد.در مقالات اینده حتما بیشتر درموردشان صحبت خواهیم کرد. در اینجا، نحوه نمایش تصویر با Matplotlib را یاد خواهید گرفت.شما می توانید با استفاده از Matplotlib تصاویر را بزرگنمایی کنید، آن را ذخیره کنید و غیره
import numpy as np
import cv2
from matplotlib import pyplot as plt
img = cv2.imread('aramweb.jpg',0)
plt.imshow(img, cmap = 'gray', interpolation = 'bicubic')
plt.xticks([]), plt.yticks([])
# to hide tick values on X and Y axis
plt.show()
خروجی کد بالا تصویر زیرخواهد بود
قسمت قبلی : مقدمه ای بر آموزش OpenCV-Python
قسمت بعدی : آموزش کار با ویدئو در OpenCV-Python
Comments (2)
سلام یه سئوال داشتم من با همچین خطلائی روبرو میشوم
.:
cv2.error: OpenCV(4.5.3) C:\Users\runneradmin\AppData\Local\Temp\pip-req-build-sn_xpupm\opencv\modules\imgproc\src\color.cpp:182: error: (-215:Assertion failed) !_src.empty() in function ‘cv::cvtColor’
بررسی کنین ببینین عکس درست لود شده یا فرمتش یا آدرسی که دادین بهش درسته یا نه! در قسمت دستور imread()