تتضمن خياطة الصور باستخدام 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()
يرجى ملاحظة أن هذا المثال هو عرض توضيحي مبسط. من الناحية العملية ، قد تحتاج إلى التعامل مع مشكلات مثل محاذاة الصورة والمزج وتصحيح التشويه للحصول على صور بانورامية عالية الجودة.