Python OpenCV ਨਾਲ ਸ਼ਾਨਦਾਰ ਪੈਨੋਰਾਮਿਕ ਫੋਟੋਆਂ ਬਣਾਉਣਾ

Python ਅਤੇ OpenCV ਦੀ ਵਰਤੋਂ ਕਰਦੇ ਹੋਏ ਚਿੱਤਰਾਂ ਨੂੰ ਸਿਲਾਈ ਕਰਨ ਵਿੱਚ ਇੱਕ ਪੈਨੋਰਾਮਿਕ ਜਾਂ ਵਾਈਡ-ਫੀਲਡ ਦ੍ਰਿਸ਼ ਬਣਾਉਣ ਲਈ ਕਈ ਚਿੱਤਰਾਂ ਨੂੰ ਜੋੜਨਾ ਸ਼ਾਮਲ ਹੁੰਦਾ ਹੈ। ਇਹ ਪ੍ਰਕਿਰਿਆ ਆਮ ਤੌਰ 'ਤੇ ਓਵਰਲੈਪਿੰਗ ਚਿੱਤਰਾਂ ਨੂੰ ਮਿਲਾਉਣ ਅਤੇ ਇੱਕ ਸਹਿਜ ਪੈਨੋਰਾਮਾ ਬਣਾਉਣ ਲਈ ਫੋਟੋਗ੍ਰਾਫੀ ਵਿੱਚ ਵਰਤੀ ਜਾਂਦੀ ਹੈ। ਓਪਨਸੀਵੀ ਦੀ ਵਰਤੋਂ ਕਰਦੇ ਹੋਏ ਚਿੱਤਰਾਂ ਨੂੰ ਸਿਲਾਈ ਕਰਨ ਦੇ ਤਰੀਕੇ ਦੀ ਇੱਕ ਬੁਨਿਆਦੀ ਰੂਪਰੇਖਾ ਇੱਥੇ ਹੈ:

ਚਿੱਤਰ ਪ੍ਰੀਪ੍ਰੋਸੈਸਿੰਗ

cv2.imread() ਓਪਨਸੀਵੀ ਦੇ ਫੰਕਸ਼ਨ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਉਹਨਾਂ ਚਿੱਤਰਾਂ ਨੂੰ ਲੋਡ ਕਰੋ ਜੋ ਤੁਸੀਂ ਸਿਲਾਈ ਕਰਨਾ ਚਾਹੁੰਦੇ ਹੋ ।

cv2.cvtColor() ਜੇਕਰ ਲੋੜ ਹੋਵੇ ਤਾਂ ਚਿੱਤਰਾਂ ਨੂੰ ਗ੍ਰੇਸਕੇਲ ਵਿੱਚ ਬਦਲੋ ।

SIFT, ORB, ਜਾਂ AKAZE ਵਰਗੇ ਵਿਸ਼ੇਸ਼ਤਾ ਖੋਜ ਐਲਗੋਰਿਦਮ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਚਿੱਤਰਾਂ ਵਿੱਚ ਮੁੱਖ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ ਦਾ ਪਤਾ ਲਗਾਓ।

ਫੀਚਰ ਮੈਚਿੰਗ

ਚਿੱਤਰਾਂ ਦੇ ਵਿਚਕਾਰ ਸੰਬੰਧਿਤ ਬਿੰਦੂਆਂ ਨੂੰ ਲੱਭਣ ਲਈ ਵਿਸ਼ੇਸ਼ਤਾ ਨਾਲ ਮੇਲ ਖਾਂਦੀਆਂ ਤਕਨੀਕਾਂ ਦੀ ਵਰਤੋਂ ਕਰੋ।

ਓਪਨਸੀਵੀ ਵਿਸ਼ੇਸ਼ਤਾ ਮੈਚਿੰਗ ਵਰਗੇ cv2.BFMatcher() ਜਾਂ ਲਈ ਫੰਕਸ਼ਨ ਪ੍ਰਦਾਨ ਕਰਦਾ ਹੈ । cv2.FlannBasedMatcher()

ਹੋਮੋਗ੍ਰਾਫੀ ਅਨੁਮਾਨ

ਪਿਛਲੇ ਪੜਾਅ ਵਿੱਚ ਮਿਲੇ ਅਨੁਸਾਰੀ ਬਿੰਦੂਆਂ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਹੋਮੋਗ੍ਰਾਫੀ ਮੈਟ੍ਰਿਕਸ ਦੀ ਗਣਨਾ ਕਰੋ।

ਹੋਮੋਗ੍ਰਾਫੀ ਮੈਟ੍ਰਿਕਸ ਦੋ ਚਿੱਤਰਾਂ ਦੇ ਵਿਚਕਾਰ ਤਬਦੀਲੀ ਦਾ ਵਰਣਨ ਕਰਦਾ ਹੈ।

ਵਾਰਪਿੰਗ ਅਤੇ ਸਿਲਾਈ

ਇੱਕ ਚਿੱਤਰ ਨੂੰ ਦੂਜੇ ਨਾਲ ਇਕਸਾਰ ਕਰਨ ਲਈ ਹੋਮੋਗ੍ਰਾਫੀ ਮੈਟ੍ਰਿਕਸ ਦੀ ਵਰਤੋਂ ਕਰੋ।

ਫੰਕਸ਼ਨ cv2.warpPerspective() ਨੂੰ ਇਸ ਮਕਸਦ ਲਈ ਵਰਤਿਆ ਜਾ ਸਕਦਾ ਹੈ.

ਸਟਿੱਚਡ ਪੈਨੋਰਾਮਾ ਨੂੰ ਬਣਾਉਣ ਲਈ ਹੋਰ ਚਿੱਤਰ ਦੇ ਨਾਲ ਵਿਗਾੜਿਆ ਚਿੱਤਰ ਨੂੰ ਜੋੜੋ।

ਮਿਲਾਉਣਾ(ਵਿਕਲਪਿਕ)

ਸਿਲੇ ਕੀਤੇ ਚਿੱਤਰਾਂ ਨੂੰ ਸਹਿਜੇ ਹੀ ਮਿਲਾਉਣ ਲਈ ਚਿੱਤਰ ਮਿਸ਼ਰਣ ਤਕਨੀਕਾਂ ਨੂੰ ਲਾਗੂ ਕਰੋ।

ਲੀਨੀਅਰ ਬੈਂਡਿੰਗ ਜਾਂ ਮਲਟੀ-ਬੈਂਡ ਬਲੇਂਡਿੰਗ ਵਰਗੀਆਂ ਤਕਨੀਕਾਂ ਦੀ ਵਰਤੋਂ ਕੀਤੀ ਜਾ ਸਕਦੀ ਹੈ।

ਡਿਸਪਲੇ ਜਾਂ ਸੇਵ ਕਰੋ

ਸਟਿੱਚ ਕੀਤੇ ਪੈਨੋਰਾਮਾ ਨੂੰ ਵਰਤ ਕੇ ਪ੍ਰਦਰਸ਼ਿਤ ਕਰੋ cv2.imshow() ਜਾਂ ਇਸਨੂੰ ਵਰਤ ਕੇ ਸੇਵ ਕਰੋ cv2.imwrite()

 

ਓਪਨਸੀਵੀ ਦੀ ਵਰਤੋਂ ਕਰਦੇ ਹੋਏ ਚਿੱਤਰ ਸਿਲਾਈ ਪ੍ਰਕਿਰਿਆ ਦਾ ਪ੍ਰਦਰਸ਼ਨ ਕਰਨ ਲਈ ਇੱਥੇ ਇੱਕ ਸਰਲ ਕੋਡ ਉਦਾਹਰਨ ਹੈ:

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()  

ਕਿਰਪਾ ਕਰਕੇ ਧਿਆਨ ਦਿਓ ਕਿ ਇਹ ਉਦਾਹਰਨ ਇੱਕ ਸਰਲ ਪ੍ਰਦਰਸ਼ਨ ਹੈ। ਅਭਿਆਸ ਵਿੱਚ, ਤੁਹਾਨੂੰ ਉੱਚ-ਗੁਣਵੱਤਾ ਵਾਲੇ ਪੈਨੋਰਾਮਿਕ ਚਿੱਤਰਾਂ ਨੂੰ ਪ੍ਰਾਪਤ ਕਰਨ ਲਈ ਚਿੱਤਰ ਅਲਾਈਨਮੈਂਟ, ਮਿਸ਼ਰਣ, ਅਤੇ ਵਿਗਾੜ ਸੁਧਾਰ ਵਰਗੇ ਮੁੱਦਿਆਂ ਨੂੰ ਸੰਭਾਲਣ ਦੀ ਲੋੜ ਹੋ ਸਕਦੀ ਹੈ।