మరియు OpenCV ఉపయోగించి చిత్రాలను కుట్టడం Python అనేది పనోరమిక్ లేదా వైడ్-ఫీల్డ్ వీక్షణను సృష్టించడానికి బహుళ చిత్రాలను కలపడం. అతివ్యాప్తి చెందుతున్న చిత్రాలను విలీనం చేయడానికి మరియు అతుకులు లేని పనోరమను రూపొందించడానికి ఈ ప్రక్రియ సాధారణంగా ఫోటోగ్రఫీలో ఉపయోగించబడుతుంది. OpenCVని ఉపయోగించి చిత్రాలను ఎలా కుట్టాలి అనే ప్రాథమిక రూపురేఖలు ఇక్కడ ఉన్నాయి:
చిత్రం ప్రీప్రాసెసింగ్
cv2.imread()
OpenCV ఫంక్షన్ని ఉపయోగించి మీరు కుట్టాలనుకుంటున్న చిత్రాలను లోడ్ చేయండి .
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()
ఈ ఉదాహరణ ఒక సరళీకృత ప్రదర్శన అని దయచేసి గమనించండి. ఆచరణలో, మీరు అధిక-నాణ్యత పనోరమిక్ చిత్రాలను సాధించడానికి ఇమేజ్ అలైన్మెంట్, బ్లెండింగ్ మరియు డిస్టార్షన్ కరెక్షన్ వంటి సమస్యలను నిర్వహించాల్సి రావచ్చు.