إنشاء صور بانورامية مذهلة باستخدام Python OpenCV

تتضمن خياطة الصور باستخدام Python و OpenCV الجمع بين صور متعددة لإنشاء عرض بانورامي أو واسع المجال. تُستخدم هذه العملية بشكل شائع في التصوير الفوتوغرافي لدمج الصور المتداخلة وإنشاء بانوراما سلسة. فيما يلي مخطط تفصيلي أساسي لكيفية خياطة الصور باستخدام OpenCV:

معالجة الصور

قم بتحميل الصور التي تريد خياطةها باستخدام cv2.imread() وظيفة OpenCV.

تحويل الصور إلى التدرج الرمادي باستخدام cv2.cvtColor() إذا لزم الأمر.

اكتشف الميزات الرئيسية في الصور باستخدام خوارزميات اكتشاف الميزات مثل SIFT أو ORB أو AKAZE.

ميزة مطابقة

استخدم تقنيات مطابقة الميزات للعثور على النقاط المقابلة بين الصور.

يوفر OpenCV وظائف مثل cv2.BFMatcher() أو cv2.FlannBasedMatcher() لمطابقة الميزات.

تقدير Homography

احسب مصفوفة التماثل باستخدام النقاط المقابلة الموجودة في الخطوة السابقة.

تصف مصفوفة homography التحول بين الصورتين.

تزييفها وتخييطها

استخدم مصفوفة homography لتشويه إحدى الصور لتتماشى مع الأخرى.

يمكن استخدام الوظيفة cv2.warpPerspective() لهذا الغرض.

ادمج الصورة الملتوية مع الصورة الأخرى لإنشاء بانوراما مخيطة.

مزج(اختياري)

قم بتطبيق تقنيات مزج الصور لدمج الصور المخيطة بسلاسة.

يمكن استخدام تقنيات مثل المزج الخطي أو المزج متعدد النطاقات.

عرض أو حفظ

اعرض البانوراما المخيطة باستخدام cv2.imshow() أو احفظها باستخدام cv2.imwrite().

 

إليك مثال رمز مبسط يوضح عملية خياطة الصورة باستخدام OpenCV:

import cv2  
  
# Load images  
image1 = cv2.imread('image1.jpg')  
image2 = cv2.imread('image2.jpg')  
  
# Convert images to grayscale  
gray1 = cv2.cvtColor(image1, cv2.COLOR_BGR2GRAY)  
gray2 = cv2.cvtColor(image2, cv2.COLOR_BGR2GRAY)  
  
# Detect key features and descriptors  
orb = cv2.ORB_create()  
keypoints1, descriptors1 = orb.detectAndCompute(gray1, None)  
keypoints2, descriptors2 = orb.detectAndCompute(gray2, None)  
  
# Feature matching  
matcher = cv2.BFMatcher(cv2.NORM_HAMMING, crossCheck=True)  
matches = matcher.match(descriptors1, descriptors2)  
  
# Apply ratio test to filter good matches  
matches = [match for match in matches if match.distance < 0.7 * max(len(matches), 1)]  
  
# Find corresponding points  
src_pts = [keypoints1[match.queryIdx].pt for match in matches]  
dst_pts = [keypoints2[match.trainIdx].pt for match in matches]  
  
# Calculate homography matrix  
homography, _ = cv2.findHomography(src_pts, dst_pts, cv2.RANSAC)  
  
# Warp and stitch images  
stitched_image = cv2.warpPerspective(image1, homography,(image1.shape[1] + image2.shape[1], image1.shape[0]))  
stitched_image[0:image2.shape[0], 0:image2.shape[1]] = image2  
  
# Display or save the stitched image  
cv2.imshow('Stitched Image', stitched_image)  
cv2.waitKey(0)  
cv2.destroyAllWindows()  

يرجى ملاحظة أن هذا المثال هو عرض توضيحي مبسط. من الناحية العملية ، قد تحتاج إلى التعامل مع مشكلات مثل محاذاة الصورة والمزج وتصحيح التشويه للحصول على صور بانورامية عالية الجودة.