تغییر اندازه تصویر با OpenCV با حفظ نسبت
دوستان عزیزم درود بر شما، من علیرضا میرحبیبی هستم و با یه آموزش دیگه از مجموعه آموزش های پردازش تصویر با OpenCV که عنوانس هست، تغییر اندازه تصویر با OpenCV در خدمتتون هستم.
امروز قصد دارم به شما عزیزان نشون بدم که چطور میشه با کتابخانه بینایی کامپیوتر (Computer Vision) یا همون پردازش تصویر (Image Processing) تکه کدی رو نوشت که سایز تصاویر رو به آسانی تغییر میده و در اینجا منظور از سایز ابعاد اونها هست.
البته یه ویدیو هم بعدا در مورد نحوه کاهش سایز تصاویر و فشرده سازی اونها خواهم ساخت که برای این کار کافیه در بخش نظرات لرن لیمو بهم یادآوری کنید.
به هر حال منظور از حفظ نسبت تصویر این هست که وقتی مثلا عرض تصویر رو تغییر میدیم به همون نسبت هم طولش تغییر کنه مثل فتوشاپ که یه آیتم داره و برای ما با اون این کارو انجام میده.
راستی اول کد این پروژه رو براتون در این مقاله میزارم و بعد ویدیو اجرای اون کد رو میسازم که در انتهای این مقاله قرارش میدم و میتونید مشاهده کنید و به سادگی اون رو اجرا کنید.
تفاوت بین کتابخانه Pillow و OpenCV
قبل این 2 تا مقاله در رابطه با تغییر اندازه و ابعاد تصاویر با ماژول pillow و opencv خدمتتون ارائه کردم.
با pillow شما میتونستید تصویر خودتون رو تغییر سایز بدید و به راحتی با حفظ نسبت های تصویر اون رو کوچیک و بزرگ کنید و تصویر شما خراب نشه و این کار رو با تابع thumbnail اون انجام میدادیم.
اما مشکل اینجا بود که ماژول pillow میتونست تصویر رو با حفظ Aspect Ratio اون کوچک کنه ولی نمیتونست از تصویر اصلی بزرگ تر کنه !
تغییر اندازه عکس با پایتون
بک تابع براتون نوشتم که خیلی دقیق میتونه تصاویر رو هم بزرگ و هم کوچکتر از ابعاد فعلیشون کنه.
کافیه تابع زیر رو بکار بگیرید تا ببینید چقدر خوب کار می کنه.
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
بزرگ و کوچک کردن تصاویر با پایتون و OpenCV
و حالا نسخه کامل برنامه رو براتون قرار میدم که به اون یک فایل تصویر میدیم و بعد برامون یک فایل دیگه با ابعاد مد نظر ما و البته حفظ نسبت ها ارائه میکنه.
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 که با دستور زیر در ترمینال انجام میشد تمام تصاویر مورد نظرتون رو ویرایش و بزرگ و کوچک کنید.
در ویدیو زیر هم کل مراحل اجرای این پروژه رو خدمتتون ارائه کردم امیدوارم مفید واقع بشه.
–
.
.
در ضمن دوره کامل آموزش صفر تا صد پایتون هم در اینجا آماده کردیم که اگر خواستید کل آموزش هارو یه جا داشته باشید کافیه اون رو از این لینک با قیمت ویژه خریداری کنید.