تغییر اندازه تصاویر با OpenCV
سلام دوستان، علیرضا میرحبیبی هستم و امروز می خوام نحوه تغییر اندازه تصاویر با OpenCV کتابخانه بینایی کامپیوتر رو خدمتتون آموزش بدم.
خب برای ماها که کارمون و رشتمون در دانشگاه هوش مصنوعی بود، OpenCV کتابخونه سطحی و ساده ای به شمار میره ولی همچنان برای بسیاری از کاربرد های ساده مناسب هست.
یکی از بهترین کاربرد های معمولی که میشه از OpenCV انتظار داشت همین تغییر سایز تصاویر هست.
البته اینطور فکر نکنید که OpenCV کتابخانه ضعیفی هست و نمیشه باهاش خیلی کارهارو کرد، نه اصلا اینطور نیست و بسیار هم قدرتمنده ولی خب روش ها و ابزار های خیلی قدرتمند تری هم هست که اونهایی که محقق هوش مصنوعی هستن معمولا از اون روش ها استفاده می کنن که هوشمند هم هستن.
ولی به هر حال ما با OpenCV قصد داریم یک عکس رو بزرگ یا کوچک کنیم که در واقع روش Resize کردن رو بکار میگیریم.
البته در مقاله قبلی روشی رو خدمتتون مطرح کردم که با کتابخانه Pillow کار می کرد و برای اون دسته از دوستانی که ماژول OpenCV رو نصب نکردن مناسب هست و میتونید با کلیک روی اینجا اون رو مطالعه کنید.
بگذریم و بریم سراغ روش هامون با OpenCV.
روش اول با تابع cv2.resize
هست و خود تابع و پارامتر های قابل قبول اون رو در زیر مشاهده می کنید:
cv2.resize(src, dsize, fx, fy, interpolation)
پارامتری های این تابع هم به شرح زیر هست:
src The file path in which the input image resides.
dsize The size of the output image, which adheres to the syntax (width, height).
fx The scale factor for the X axis.
fy The scale factor for the Y axis.
interpolation The technique for adding or removing pixels during the resizing process. The default is cv2.INTER_LINEAR.
Note: Apply either dsize or fx and fy, or all three.
تکه کد زیر رو هم براتون گذاشتم تا بتونید خیلی ساده کار تغییر اندازه عکس ها با پایتون و کتابخانه OpenCV رو انجام بدید:
import cv2
import matplotlib.pyplot as plt
#خواندن فایل عکس
img=cv2.imread("course-python.jpg")
print('Image Width is',img.shape[1])
print('Image Height is',img.shape[0])
#تغییر اندازه تصویر با تابع زیر
new_image = cv2.resize(img, (300,300))
print('Image Width is',new_image.shape[1])
print('Image Height is',new_image.shape[0])
cv2.imwrite("small_image.jpg",new_image)
ویدیو نهایی هم در آخر این مقاله براتون قرار دادم.
همانطور که در مقاله قبلی در مورد تغییر اندازه تصاویر با متد () resize در ماژول Pillow آموزش دیدید، این روش نسبت تصویر (aspect ratio) را تغییر میدهد و باعث ایجاد اعوجاج میشود. برای حفظ این نسبت، دستور زیر را اجرا کنید تا اندازه تصویر به 75٪ از عرض و ارتفاع آن تغییر یابد:
img_75 = cv2.resize(img, None, fx = 0.75, fy = 0.75)
علاوه بر این، برای نمونه تغییر اندازه داده شده که بزرگتر از نمونه اصلی است، می توانید درون یابی (interpolation) عملیات تغییر اندازه را سفارشی کنید. حتی اگر انجام این کار باعث کاهش کیفیت شود، ممکن است برای برخی از برنامه های بینایی کامپیوتری انتخاب مناسبی باشد.
در اینجا مقادیر آرگومان درون یابی (interpolation) آمده است:
cv2.INTER_LINEAR The standard bilinear interpolation, ideal for enlarged images
cv2.INTER_NEAREST The nearest neighbor interpolation, which, though fast to run, creates blocky images
cv2.INTER_AREA The interpolation for the pixel area, which scales down images
cv2.INTER_CUBIC The bicubic interpolation with 4×4-pixel neighborhoods, which, though slow to run, generates high-quality instances
cv2.INTER_LANCZOS4 The Lanczos interpolation with an 8×8-pixel neighborhood, which generates images of the highest quality but is the slowest to run.
لطفا هر سوالی دارید حتما در بخش نظرات مطرح کنید خیلی خوشحال میشم تا بتونم سوالات شما دوستان رو پاسخ بدم و در راستای پروژه ها و علایق شما آموزش های جدید و مفید بسازم.
در ضمن کانال یوتیوب من به همراه آپارات راه اندازی شده دوستانی که علاقه مند هستن میتونن من رو سابسکرایب کنند تا ویدیو های اونجا رو هم از دست ندن و بتونن به سرعت به مطالب جدید ما برسن.
ازتون ممنونم نظر یادتون نره
دیدگاهتان را بنویسید