სურათების შეკერვა Python OpenCV-ის გამოყენებით მოიცავს მრავალი სურათის გაერთიანებას პანორამული ან ფართო ველის ხედის შესაქმნელად. ეს პროცესი ჩვეულებრივ გამოიყენება ფოტოგრაფიაში გადახურული სურათების შერწყმისა და უწყვეტი პანორამის შესაქმნელად. აქ მოცემულია ძირითადი მონახაზი, თუ როგორ უნდა შეკეროთ სურათები 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()
გთხოვთ გაითვალისწინოთ, რომ ეს მაგალითი გამარტივებული დემონსტრირებაა. პრაქტიკაში, შეიძლება დაგჭირდეთ ისეთი საკითხების მოგვარება, როგორიცაა გამოსახულების გასწორება, შერევა და დამახინჯების კორექტირება მაღალი ხარისხის პანორამული სურათების მისაღწევად.