شروع به کار با عکس ها
اهداف
- خواندن عکس از فایل
- نمایش دادن عکس در یک صفحه
- نوشتن یک عکس داخل فایل
کد
import cv2 as cv
import sys
img = cv.imread(cv.samples.findFile("starry_night.jpg"))
if img is None:
sys.exit("Could not read the image.")
cv.imshow("Display window", img)
k = cv.waitKey(0)
if k == ord("s"):
cv.imwrite("starry_night.png", img)
توضیحات
در مرحله اول کتابخانه مورد نظر را تعریف می کنیم.
import cv2 as cv
import sys
حالا نوبت تحلیل کد اصلی است.در مرحله اول عکس "starry_Night.png" را از نمونه های کتابخانه میخوانیم.
صدا زدن cv::imread
دو ورودی میگیرد که اولین ورودی آدرس عکس است.
ورودی دوم اختیاری است که کار مشخص کردن فرمت عکس را انجام میدهد.
ورودی های دوم:
cv.IMREAD_COLOR
: عکس را در فرمت BGR 8-bit بارگذاری میکندcv.IMREAD_UNCHANGED
cv.IMREAD_GRAYSCALE
: بارگذاری عکس به صورت شدتی(سفید و سیاه)
بعد از خوانده شدن عکس , اطلاعات در یک آبجکت cv::Mat
ذخیره میشود.
img = cv.imread(cv.samples.findFile("starry_night.jpg"))
در ادامه یک تست اجرا میشود تا بارگذاری صحیح عکس آزموده شود.
if img is None:
sys.exit("Could not read the image.")
سپس عکس توسط تابع cv::imshow
نمایش داده میشود.
این تابع 2 ورودی دارد که اولین ورودی آن عنوان پنجره ای است که عکس در آن نمایش داده میشود و دومین ورودی آن آبجکت cv::Mat
است.
برای اینکه صفحه را تا زمانی که کاربر کلیدی را وارد کند نمایش دهیم از تابع cv::waitkey
استفاده میکنیم.
این تابع یک ورودی دارد که نشان دهنده مدت زمانیست که برنامه باید برای ورودی کاربر صبر کند.
ورودی تابع int است و به میلی ثانیه هستند.
صفر نشان دهنده این است که برنامه باید برای همیشه صبر کند.
به عنوان مثال اگر عدد 5000 رابه تابع بدهیم
cv.waitkey(5000)
به مدت 5 ثانیه صبر میکند
واحد میلی ثانیه است.
اگر عدد صفر به تابع داده شود برای همیشه صبر میکند برای همین بهتر است از cv.destroyAllWindows
بعد از cv.waitkey(0)
استفاده شود.
cv.imshow("Display window", img)
k = cv.waitKey(0)
در نهایت برنامه درصورتی که کلید s فشرده شود عکس را در یک فایل ذخیره میکند.
این عمل توسط تابع cv::imwrite
انجام میشود که 2 ورودی دارد.
یک ورودی مسیر ذخیره فایل و ورودی دیگر یک آبجکت cv::Mat
if k == ord("s"):
cv.imwrite("starry_night.png", img)
اگر با عکس هایی با کیفیت بالا استفاده میکنید میتوانید با استفاده از cv.resize()
کیفیت عکس را تغییر دهید
import cv2 as cv
import sys
# خواندن تصویر
img = cv.imread(cv.samples.findFile("starry_night.jpg"))
# بررسی اینکه آیا تصویر با موفقیت بارگذاری شده است
if img is None:
sys.exit("Could not read the image.")
# تغییر اندازه تصویر به ابعاد جدید (مثلاً نصف اندازه اصلی)
width = int(img.shape[1] * 0.5) # عرض تصویر جدید (50٪ از عرض اصلی)
height = int(img.shape[0] * 0.5) # ارتفاع تصویر جدید (50٪ از ارتفاع اصلی)
new_size = (width, height)
# تغییر اندازه تصویر
resized_img = cv.resize(img, new_size, interpolation=cv.INTER_LINEAR)
# نمایش تصویر اصلی و تصویر تغییر اندازه یافته
cv.imshow("Original Image", img)
cv.imshow("Resized Image", resized_img)
# منتظر بماند تا کاربر کلیدی را بفشارد
cv.waitKey(0)
# بستن همه پنجرهها
cv.destroyAllWindows()
تابع cv.resize()
سه ورودی میگیرد
اولین ورودی عکس اصلی و دومین ورودی یک تاپل که به صورت (عرض , ارتفاع)
است داده میشود
سومین ورودی روش درونیابی است که در اینجا از cv.INTER_LINEAR
استفاده کردیم.
روش درون یابی در اصل همان روشی است که کمک میکند هنگام تغییر سایزی پیکسل های جدید کم و زیاد شوند
مطالعه بقیه روش ها به عهده خودتون.