Python OpenCV کے ساتھ شاندار Panoramic تصاویر بنانا

OpenCV کا استعمال کرتے ہوئے تصویروں کو سلائی کرنے میں Python ایک پینورامک یا وسیع فیلڈ ویو بنانے کے لیے متعدد تصاویر کو یکجا کرنا شامل ہے۔ یہ عمل عام طور پر فوٹو گرافی میں اوور لیپنگ امیجز کو ضم کرنے اور ایک ہموار پینورما بنانے کے لیے استعمال ہوتا ہے۔ OpenCV کا استعمال کرتے ہوئے تصاویر کو سلائی کرنے کا طریقہ یہاں ایک بنیادی خاکہ ہے:

امیج پری پروسیسنگ

وہ تصاویر لوڈ کریں جنہیں آپ OpenCV کے cv2.imread() فنکشن کا استعمال کرتے ہوئے سلائی کرنا چاہتے ہیں۔

cv2.cvtColor() اگر ضروری ہو تو تصاویر کو گرے اسکیل میں تبدیل کریں ۔

SIFT، ORB، یا AKAZE جیسے خصوصیت کا پتہ لگانے والے الگورتھم کا استعمال کرتے ہوئے تصاویر میں اہم خصوصیات کا پتہ لگائیں۔

فیچر میچنگ

تصاویر کے درمیان متعلقہ پوائنٹس تلاش کرنے کے لیے فیچر میچنگ تکنیک کا استعمال کریں۔

OpenCV فیچر میچنگ جیسے cv2.BFMatcher() یا اس کے لیے فنکشن فراہم کرتا ہے۔ cv2.FlannBasedMatcher()

ہوموگرافی کا تخمینہ

پچھلے مرحلے میں پائے جانے والے متعلقہ پوائنٹس کا استعمال کرتے ہوئے ہوموگرافی میٹرکس کا حساب لگائیں۔

ہوموگرافی میٹرکس دو امیجز کے درمیان تبدیلی کو بیان کرتا ہے۔

وارپنگ اور سلائی

ایک تصویر کو دوسری کے ساتھ سیدھ میں لانے کے لیے ہوموگرافی میٹرکس کا استعمال کریں۔

فنکشن 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()  

براہ کرم نوٹ کریں کہ یہ مثال ایک آسان مظاہرہ ہے۔ عملی طور پر، آپ کو اعلی معیار کی پینورامک امیجز حاصل کرنے کے لیے امیج الائنمنٹ، ملاوٹ، اور مسخ کی اصلاح جیسے مسائل کو سنبھالنے کی ضرورت پڑ سکتی ہے۔