تغییر اندازه با حفظ نسبت تصویر در OpenCV
درود بر شما دوستان، علیرضا میرحبیبی هستم و در این مقاله قصد دارم نحوه تغییر اندازه با حفظ نسبت تصویر در OpenCV رو خدمتتون آموزش بدم.
پس لطفا تا پایان مقاله با من باشید و یادتون نره ویدیوی اجرای این تابع در آخر مقاله رو ببینید و همینجا نظر بدید.
قبل این 2 تا مقاله در رابطه با تغییر اندازه و ابعاد تصاویر با ماژول pillow و opencv خدمتتون ارائه کردم.
با pillow شما میتونستید تصویر خودتون رو تغییر سایز بدید و به راحتی با حفظ نسبت های تصویر اون رو کوچیک و بزرگ کنید و تصویر شما خراب نشه و این کار رو با تابع thumbnail اون انجام میدادیم.
اما مشکل اینجا بود که ماژول pillow میتونست تصویر رو با حفظ Aspect Ratio اون کوچک کنه ولی نمیتونست از تصویر اصلی بزرگ تر کنه !
اون آموزش OpenCV قبلی هم با دقتی که من مد نظرم بود نمیتونست بزرگ و کوچیک کنه پس تصمیم گرفتم یک تابع برای این کار با OpenCV براتون آماده کنم که خیلی دقیق این کار رو می کنه و با اون شما به راحتی میتونید تصاویر خودتون رو هر چقدر که دوست دارید بزرگ یا کوچک کنید.
تابع ما این هست:
def image_resize(image, width = None, height = None, inter = cv2.INTER_AREA):
# initialize the dimensions of the image to be resized and
# grab the image size
dim = None
(h, w) = image.shape[:2]
# if both the width and height are None, then return the
# original image
if width is None and height is None:
return image
# check to see if the width is None
if width is None:
# calculate the ratio of the height and construct the
# dimensions
r = height / float(h)
dim = (int(w * r), height)
# otherwise, the height is None
else:
# calculate the ratio of the width and construct the
# dimensions
r = width / float(w)
dim = (width, int(h * r))
# resize the image
resized = cv2.resize(image, dim, interpolation = inter)
# return the resized image
return resized
و در اینجا هم نسخه کامل برنامه که تابع رو هم فراخونی کرده و در نهایت فایل تصویر جدید رو برامون ذخیره می کنه رو قرار میدم.
در واقع کد زیر نسخه کامل تابع و اجرای این روش کاملتر هست:
import cv2
def image_resize(image, width = None, height = None, inter = cv2.INTER_AREA):
# initialize the dimensions of the image to be resized and
# grab the image size
dim = None
(h, w) = image.shape[:2]
# if both the width and height are None, then return the
# original image
if width is None and height is None:
return image
# check to see if the width is None
if width is None:
# calculate the ratio of the height and construct the
# dimensions
r = height / float(h)
dim = (int(w * r), height)
# otherwise, the height is None
else:
# calculate the ratio of the width and construct the
# dimensions
r = width / float(w)
dim = (width, int(h * r))
# resize the image
resized = cv2.resize(image, dim, interpolation = inter)
# return the resized image
return resized
file = "course-python.jpg"
img = cv2.imread(file)
image = image_resize(img, height = 1400)
cv2.imwrite("resized_image.jpg",image)
همونطور که میبینید من در قسمت image = image_resize(img, height = 1400) گفتم که فقط برام مهمه که Height عکسم 1400 پیکسل باشه و خود تابع اتوماتیک میاد بر اساس عکس اصلی Width مارو تعیین می کنه (مثل فتوشاپ وقتی CTRL+ALT+I رو میزنیم)
حالا دیگه با این تابع به راحتی میتونید با نصب ماژول opencv که با دستور زیر در ترمینال انجام میشد تمام تصاویر مورد نظرتون رو ویرایش و بزرگ و کوچک کنید.
در ویدیو زیر هم کل مراحل اجرای این پروژه رو خدمتتون ارائه کردم امیدوارم مفید واقع بشه.
دستور نصب کتابخانه بینایی کامپیوتر OpenCV در ترمینال pycharm یا Command prompt ویندوز و ترمینال لینوکس
pip3 install opencv-python
دوستان عزیز یادتون نره سوالاتتون رو در بخش نظرات مطرح کنید و اگر موضوع خاصی هست که در اون نیاز به آموزش دارید بفرمایید تا براتون آماده کنم و منتشر بشه.
در ضمن ویدیو های من علاوه بر دانشگاه اینترنتی در کانال یوتیوب و آپارات هم در دسترس هست و با سابسکرایب کردن کانال ها میتونید زودتر به مقاله های جدید دست پیدا کنید.
دیدگاهتان را بنویسید