Spajanje slika pomoću Python OpenCV-a uključuje kombiniranje više slika za stvaranje panoramskog ili širokog prikaza. Ovaj se postupak obično koristi u fotografiji za spajanje preklapajućih slika i stvaranje besprijekorne panorame. Ovdje je osnovni pregled kako spojiti slike pomoću OpenCV-a:
Predobrada slike
Učitajte slike koje želite spojiti pomoću OpenCV cv2.imread()
funkcije.
Pretvorite slike u sive tonove pomoću cv2.cvtColor()
ako je potrebno.
Otkrijte ključne značajke na slikama pomoću algoritama za detekciju značajki kao što su SIFT, ORB ili AKAZE.
Podudaranje značajki
Upotrijebite tehnike podudaranja značajki kako biste pronašli odgovarajuće točke između slika.
OpenCV pruža funkcije poput cv2.BFMatcher()
ili cv2.FlannBasedMatcher()
za podudaranje značajki.
Homografska procjena
Izračunajte homografsku matricu koristeći odgovarajuće točke pronađene u prethodnom koraku.
Homografska matrica opisuje transformaciju između dvije slike.
Savijanje i šivanje
Upotrijebite homografsku matricu da iskrivite jednu od slika kako bi se poravnala s drugom.
Funkcija cv2.warpPerspective()
se može koristiti u tu svrhu.
Kombinirajte iskrivljenu sliku s drugom slikom kako biste stvorili spojenu panoramu.
Miješanje(nije obavezno)
Primijenite tehnike miješanja slika kako biste neprimjetno spojili spojene slike.
Mogu se koristiti tehnike poput linearnog miješanja ili višepojasnog miješanja.
Prikaz ili spremanje
Prikažite spojenu panoramu pomoću cv2.imshow()
ili je spremite pomoću cv2.imwrite()
.
Evo pojednostavljenog primjera koda koji demonstrira proces spajanja slike pomoću OpenCV-a:
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()
Imajte na umu da je ovaj primjer pojednostavljena demonstracija. U praksi ćete možda morati riješiti probleme kao što su poravnanje slike, stapanje i korekcija izobličenja kako biste postigli visokokvalitetne panoramske slike.