برش و تغییر سایز تصاویر

  • مدرس: علی بیگدلی
  • تاریخ انتشار: Aug 26, 2020
تغییر سایز تصویر

در OpenCV، می توانیم سایز تصاویر را تغییر دهیم و همچنین می توانیم عکس ها را کوچک و بزرگ کنیم. تصاویر برای انجام عملیات خاص بر رویشان کوچک می شوند و پس از پایان یافتن عملیات مورد نظر دوباره به سایز بزرگتر تبدیل می شوند. کوچک شدن به سرعت انجام محاسبات کمک می کند . ما همچنین می توانیم تصاویر را برش دهیم. این کار در محاسبات انتخابی کمک می کند زیرا ما نیازی به پردازش کل تصویر در بعضی شرایط نداریم. در قطعه کد زیر می توانید نحوه ایجاد تغییر سایز در تصاویر ورودی را مشاهده نمایید. ایجاد تغییرات سایز توسط متد resize در کتابخانه opencv کنترل می شود. که دارای سه آرگومان ورودی است

#importing the module needed
import cv2
# reading the image with imread("image directory")
image = cv2.imread("Sample.jpg")
#using resize method for changing size
#cv2.resize( 'source' , (x,y))
resize_img = cv2.resize(image  , (200 , 250))
#showing the original image
cv2.imshow("image ",image )
#showing the resized image
cv2.imshow("image2 ",resize_img )
#waiting for a key stroke to exit
cv2.waitKey(0)
cv2.destroyAllWindows()

خروجی کد:

نکته: قطعه کد بالا تنها تغییر سایز ایجاد می کند و مقایس را نمی سازد. برای یجاد مقایس در تصویر مورد نظر می توانید از قطعه کد زیر به جای resize_img استفاده نمایید. که در این شرایط Scale واحد تغییرا مقیاس خواهد بود. هر چه این عدد در ارز float و اعشاری به سمت صفر حرکت کند تصویر وچکتر و هر چه بیشتر از 1 شود مقیاس تصویر بزرگتر خواهد بود. نمونه کد کاهش مقیاس:

#for scaling down the image
scale=0.6
resize_img = cv2.resize(image, None, fx=scale, fy=scale, interpolation= cv2.INTER_LINEAR)
نمونه کد افزایش مقیاس:

#for scaling down the image
scale=1.3
resize_img = cv2.resize(image, None, fx=scale, fy=scale, interpolation= cv2.INTER_LINEAR)

 

خروجی کد:

برش تصویر

در بعضی شرایط لازم به استفاده از بخشی از تصویر می شود و میبایست قسمت مورد نظر cut و یا برش داده شود. این عمل با تعیین نقاط x,y اولیه و x,y ثانویه صورت می گیرد. تصاویری که در opencv به نمایش در می آیند بر اساس نمودار ها در ربع چهارم قرار می گیرد . اما تفاوت آن در این است که این ربع دارای مقادیر y منفی هستش اما اگر مقدار y را در قدر مطلق در نظر بگیریم |y| به مقصود مورد نظر می رسیم. به عنوان مثال زمانی که عکسی 480*640 می باشد مقدار x آن برابر 0-640 می باشد و نقطه 0*0 در واقع در جایگاه شروع 0 ربع چهارم قرار می گیرد. نمونه زیر نحوه برش عکس را نشان می دهد.

#importing the module needed
import cv2
# reading the image with imread("image directory")
image = cv2.imread("Sample.jpg")
#cropping image and makeing a square from point x1,y1 to x2,y2
#image[y1:y2,x1:x2]
crop = image[1:200,1:200]
#showing original image
cv2.imshow("image ",image )
#showing the cropped image
cv2.imshow("image2 ",crop )
#waiting for a key stroke to exit
cv2.waitKey(0)
cv2.destroyAllWindows()

خروجی کد:

چرخش تصویر

در OpenCV، ما می توانیم تصاویر را در هر نقطه که تصویر را به وضعیت صحیحش نشان می دهد در حول نقطه مرکزی به چرخش در آوریم که توسط ایجاد یک زاویه انجام می شود. در OpenCV یک چرخش به عنوان یک ماتریس 2x3 نمایش داده می شود، زیرا چرخش ها متعلق به کلاس خاصی از تبدیل هایی به نام Transform Affine است که در بخش بعدی پوشش داده می شود. تابع getRotationMatrix2D برای دریافت ماتریس است که چرخش را تعریف می کند. پارامترهای این تابع عبارتند از:

rotation = getRotationMatrix2D (مرکز، زاویه، مقیاس)

نمونه کد زیر نحوه چرخش عکس مورد نظر را در دو زاویه مخالف نسبت به هم به شما نشان می دهد.

#importing the module needed
import cv2
# reading the image with imread("image directory")
image = cv2.imread("Sample.jpg")

# Getting the dimesnions of the image
dim = image.shape
rotationAngle = -30
scaleFactor = 1

# Rotating the image by -30 degrees about the center
# dim[0] stores the no of rows and dim[1] no of columns

#Center: point about which rotation will occur
#rotationAngle: angle by which rotation is occurring
#Scale : an optional scaling factor

rotation = cv2.getRotationMatrix2D((dim[1]/2, dim[0]/2), rotationAngle, scaleFactor)

result = cv2.warpAffine(image, rotation, (dim[1],dim[0]))

#showing original image
cv2.imshow("image ",image )
#showing rotated image
cv2.imshow("image2 ",result )

#waiting for a key stroke to exit
cv2.waitKey(0)
cv2.destroyAllWindows()

خروجی کد:

 

ثبت دیدگاه
نام *
ایمیل*
دیدگاه *
captcha
2دیدگاه
  • آرش
    1 month, 3 weeks ago

    درود بعضی بخشهای تدریس شامل فیلم آموزشی نیست
    آیا امکان دارد ویدیو ها را کامل کنید؟

    • علی بیگدلی
      1 month, 3 weeks ago

      ویدئو ها به مرور قرار خواهند گرفت چون مطالب دائم در حال تغییر هستن می بایست روی یک ورژن ثابت فیلم گرفته بشه و الا مشکلات درک برای دوستان پیش میاره