Ali Ismael نشر 20 أكتوبر 2021 أرسل تقرير نشر 20 أكتوبر 2021 هل هناك طريقة معينة في بايثون أو OpenCV لتدوير الصورة بدرجة معينة؟ 1 اقتباس
1 Ali Haidar Ahmad نشر 20 أكتوبر 2021 أرسل تقرير نشر 20 أكتوبر 2021 نحتاج بدايةً إلى إنشاء مصفوفة التحويل والتي نسميها M وفي حالة التدوير تكون من الشكل: لكن لحسن الحظ لن تكون مضطراً لتعيين هذه القيم حيث أننا نستخدم الدالة 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 Ahmed Sharshar نشر 21 أكتوبر 2021 أرسل تقرير نشر 21 أكتوبر 2021 (معدل) هناك طريقة بسيطة للغاية لتدوير الصور في 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) وتظهر كالتالي: أو يمكنك تحريكها عكس عقارب الساعة هكذا: #تدوير الصورة 90 درجة في عكس اتجاة عقارب الساعة img_rotate_90_counterclockwise = cv2.rotate(img, cv2.ROTATE_90_COUNTERCLOCKWISE) cv2.imwrite('data/dst/lena_90_counterclockwise.jpg', img_rotate_90_counterclockwise) أو لفها كاملة كالتالي: #تدوير الصورة 180 درجة img_rotate_180 = cv2.rotate(img, cv2.ROTATE_180) cv2.imwrite('data/dst/lena_180.jpg', img_rotate_180) وهناك طريقة أخرى لقلب الصورة بأي زاوية تريد باستخدام 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) وتظهر هكذا على صورة أخرى: مع امكانية تحديد الزاوية التي تريد لتدوير الصورة تم التعديل في 21 أكتوبر 2021 بواسطة Ahmed Sharshar اقتباس
السؤال
Ali Ismael
هل هناك طريقة معينة في بايثون أو OpenCV لتدوير الصورة بدرجة معينة؟
2 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.