Lenyűgöző panorámafotók készítése Python OpenCV segítségével

A képek összefűzése Python az OpenCV használatával több kép kombinálását jelenti panoráma vagy széles látómezős nézet létrehozásához. Ezt az eljárást általában a fotózásban használják az egymást átfedő képek egyesítésére és zökkenőmentes panoráma létrehozására. Íme egy alapvázlat a képek OpenCV használatával történő összefűzéséhez:

Kép előfeldolgozása

Töltse be az összefűzni kívánt képeket az OpenCV funkciójával cv2.imread().

Szükség esetén konvertálja a képeket szürkeárnyalatossá cv2.cvtColor().

Érzékelje fel a képek legfontosabb jellemzőit olyan jellemzőfelismerő algoritmusok segítségével, mint a SIFT, ORB vagy AKAZE.

Funkcióegyeztetés

Használjon jellemző illesztési technikákat a megfelelő pontok megtalálásához a képek között.

Az OpenCV olyan funkciókat biztosít, mint cv2.BFMatcher() a vagy cv2.FlannBasedMatcher() a funkciók illesztése.

Homográfiai becslés

Számítsa ki a homográfiai mátrixot az előző lépésben talált megfelelő pontok felhasználásával.

A homográfiai mátrix a két kép közötti átalakulást írja le.

Vetítés és varrás

Használja a homográfiai mátrixot az egyik kép elvetemítésére, hogy igazodjon a másikhoz.

A cv2.warpPerspective() funkció erre a célra használható.

Kombinálja a vetemedett képet a másik képpel az összefűzött panoráma létrehozásához.

Keverés(opcionális)

Alkalmazzon képkeverési technikákat az összefűzött képek zökkenőmentes egyesítéséhez.

Olyan technikák használhatók, mint a lineáris keverés vagy a többsávos keverés.

Megjelenítés vagy mentés

Jelenítse meg az összefűzött panorámát a gombbal, cv2.imshow() vagy mentse el a segítségével cv2.imwrite().

 

Íme egy egyszerűsített kódpélda, amely bemutatja a képösszefűzési folyamatot OpenCV használatával:

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

Kérjük, vegye figyelembe, hogy ez a példa egy egyszerűsített bemutató. A gyakorlatban előfordulhat, hogy olyan problémákat kell kezelnie, mint a képigazítás, a keverés és a torzítás korrekciója a kiváló minőségű panorámaképek eléréséhez.