اذهب إلى المحتوى
  • 0

تدوير الصور بمقدار محدد باستخدام OpenCV في بايثون

Ali Ismael

السؤال

Recommended Posts

  • 1

نحتاج بدايةً إلى إنشاء مصفوفة التحويل والتي نسميها M وفي حالة التدوير تكون من الشكل:
Untitled.png.574ccea735afcb7ec8f17feec47b9de3.png
لكن لحسن الحظ لن تكون مضطراً لتعيين هذه القيم حيث أننا نستخدم الدالة cv2.getRotationMatrix2D لإنشاء مصفوفة التحويل ثم نمررها إلى الدالة warpAffine لتطبيق التحويل على الصورة (تطبيق مصفوفة التحويل)، والمثال التالي يوضح العملية حيث سنقوم فيه بتدوير الصورة بمقدار 90 درجة:

import cv2
import numpy as np
# قراءة الصورة
img = cv2.imread('/content/road.jpg')
# استخراج أبعادها
rows,cols,_ = img.shape
# تدوير الصورة
M = cv2.getRotationMatrix2D((cols/2,rows/2),90,1)
# warpAffine استخدام الدالة 
dst = cv2.warpAffine(img,M,(cols,rows))
cv2.imshow('img',dst)
cv2.waitKey(0)
cv2.destroyAllWindows()
"""
# في حالة كنت تستخدم غوغل كولاب
from google.colab.patches import cv2_imshow
cv2_imshow(dst)
"""

حيث أن التابع cv2.getRotationMatrix2D يحدد لنا زاوية الدوران التي نريد تدوير الصورة بها والوسيط الأول لهذا التابع يمثل مركز دوران الصورة ( وهذا يكافئ (cols/2,rows/2) ). أما الوسيط الثاني فيمثل مقدار الدوران بالدرجات (هنا حددنا 90 درجة). أما الوسيط الثالث فيحدد حجم صورة الخرج.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 1

هناك طريقة بسيطة للغاية لتدوير الصور في opencv باستخدام الدالة rotate والتي تمكن من عكس الصورة بزاوية معينة، المثال التالي يوضح طريقة استخدامها لتدوير صورة بمقدار 90 درجة مع عقارب الساعة:

import cv2

#قراءةالصورة الأصلية
img = cv2.imread('data/src/lena.jpg')

#تدوير الصورة 90 درجة في اتجاة عقارب الساعة
img_rotate_90_clockwise = cv2.rotate(img, cv2.ROTATE_90_CLOCKWISE)
cv2.imwrite('data/dst/lena_90_clockwise.jpg', img_rotate_90_clockwise)

وتظهر كالتالي:

lena_cv_rotate_90_clockwise.jpg.a444382f41c9aae82cc40f72f1bb660f.jpg

أو يمكنك تحريكها عكس عقارب الساعة هكذا:


#تدوير الصورة 90 درجة في عكس اتجاة عقارب الساعة
img_rotate_90_counterclockwise = cv2.rotate(img, cv2.ROTATE_90_COUNTERCLOCKWISE)
cv2.imwrite('data/dst/lena_90_counterclockwise.jpg', img_rotate_90_counterclockwise)

lena_cv_rotate_90_counterclockwise.jpg.662e9e9db8e8a0f7dd684ff2ee607864.jpg

أو لفها كاملة كالتالي:

#تدوير الصورة 180 درجة
img_rotate_180 = cv2.rotate(img, cv2.ROTATE_180)
cv2.imwrite('data/dst/lena_180.jpg', img_rotate_180)

lena_cv_rotate_180.jpg.b2334ff0d1c1d49d8e8b09ae1291f6d2.jpg

وهناك طريقة أخرى لقلب الصورة بأي زاوية تريد باستخدام warpAffine:

# load the image and show it
image = cv2.imread(args["image"])
cv2.imshow("Original", image)
# حساب أبعاد الصورة ونقطة المنتصف
(h, w) = image.shape[:2]
(cX, cY) = (w // 2, h // 2)
# لف الصورة 45 درجة
M = cv2.getRotationMatrix2D((cX, cY), 45, 1.0)
rotated = cv2.warpAffine(image, M, (w, h))
cv2.imshow("Rotated by 45 Degrees", rotated)

وتظهر هكذا على صورة أخرى:

Capture.PNG.16b4197e3bac135673e7dcdfc1104d69.PNG

مع امكانية تحديد الزاوية التي تريد لتدوير الصورة

تم التعديل في بواسطة Ahmed Sharshar
رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...