Crearea de fotografii panoramice uimitoare cu Python OpenCV

Asamblarea imaginilor folosind Python și OpenCV implică combinarea mai multor imagini pentru a crea o vedere panoramică sau cu câmp larg. Acest proces este folosit în mod obișnuit în fotografie pentru a îmbina imaginile care se suprapun și pentru a crea o panoramă perfectă. Iată o schiță de bază despre cum să îmbinați imagini folosind OpenCV:

Preprocesarea imaginii

Încărcați imaginile pe care doriți să le cusați folosind cv2.imread() funcția OpenCV.

Convertiți imaginile în tonuri de gri folosind cv2.cvtColor() dacă este necesar.

Detectați caracteristicile cheie din imagini folosind algoritmi de detectare a caracteristicilor precum SIFT, ORB sau AKAZE.

Potrivirea caracteristicilor

Utilizați tehnici de potrivire a caracteristicilor pentru a găsi punctele corespunzătoare între imagini.

OpenCV oferă funcții precum cv2.BFMatcher() sau cv2.FlannBasedMatcher() pentru potrivirea caracteristicilor.

Estimarea omografiei

Calculați matricea de omografie folosind punctele corespunzătoare găsite în pasul anterior.

Matricea de omografie descrie transformarea dintre cele două imagini.

Deformare și cusătură

Utilizați matricea de omografie pentru a deforma una dintre imagini pentru a se alinia cu cealaltă.

Funcția cv2.warpPerspective() poate fi utilizată în acest scop.

Combinați imaginea deformată cu cealaltă imagine pentru a crea panoramă cusută.

Amestecare(Opțional)

Aplicați tehnici de amestecare a imaginilor pentru a îmbina perfect imaginile cusute.

Pot fi utilizate tehnici precum amestecarea liniară sau amestecarea cu mai multe benzi.

Afișați sau Salvați

Afișați panorama cusată folosind cv2.imshow() sau salvați-o folosind cv2.imwrite().

 

Iată un exemplu de cod simplificat care demonstrează procesul de îmbinare a imaginii folosind 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()  

Vă rugăm să rețineți că acest exemplu este o demonstrație simplificată. În practică, este posibil să trebuiască să gestionați probleme precum alinierea imaginii, amestecarea și corectarea distorsiunii pentru a obține imagini panoramice de înaltă calitate.