Luo upeita panoraamakuvia Python OpenCV: llä

Kuvien yhdistäminen Python OpenCV:n avulla edellyttää useiden kuvien yhdistämistä panoraama- tai laajakuvanäkymän luomiseksi. Tätä prosessia käytetään yleisesti valokuvauksessa päällekkäisten kuvien yhdistämiseen ja saumattoman panoraaman luomiseen. Tässä on peruskuva kuvien yhdistämisestä OpenCV:n avulla:

Kuvan esikäsittely

Lataa kuvat, jotka haluat yhdistää OpenCV- cv2.imread() toiminnolla.

Muunna kuvat harmaasävyiksi cv2.cvtColor() tarvittaessa.

Tunnista kuvien tärkeimmät ominaisuudet käyttämällä ominaisuudentunnistusalgoritmeja, kuten SIFT, ORB tai AKAZE.

Ominaisuuksien yhdistäminen

Käytä ominaisuuden täsmäytystekniikoita löytääksesi vastaavia pisteitä kuvien väliltä.

OpenCV tarjoaa toimintoja, kuten cv2.BFMatcher() tai cv2.FlannBasedMatcher() ominaisuuksien yhdistämiseen.

Homografian arvio

Laske homografiamatriisi käyttämällä edellisessä vaiheessa löydettyjä vastaavia pisteitä.

Homografiamatriisi kuvaa muunnoksen kahden kuvan välillä.

Vääntö ja ompeleminen

Käytä homografiamatriisia taivuttaaksesi yhtä kuvista toisen kanssa.

Toimintoa cv2.warpPerspective() voidaan käyttää tähän tarkoitukseen.

Yhdistä vääntynyt kuva toiseen kuvaan luodaksesi yhdistetty panoraama.

Sekoitus(valinnainen)

Käytä kuvien sekoitustekniikoita yhdistääksesi ommeltuja kuvia saumattomasti.

Voidaan käyttää tekniikoita, kuten lineaarista sekoitusta tai monikaistasekoitusta.

Näytä tai Tallenna

Näytä yhdistetty panoraama käyttämällä cv2.imshow() tai tallenna se käyttämällä cv2.imwrite().

 

Tässä on yksinkertaistettu koodiesimerkki, joka havainnollistaa kuvien yhdistämisprosessia OpenCV:tä käyttäen:

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

Huomaa, että tämä esimerkki on yksinkertaistettu esittely. Käytännössä saatat joutua käsittelemään ongelmia, kuten kuvan kohdistusta, sekoittamista ja vääristymien korjausta korkealaatuisten panoraamakuvien saavuttamiseksi.