Krijimi i fotove mahnitëse panoramike me Python OpenCV

Qepja e imazheve duke përdorur Python dhe OpenCV përfshin kombinimin e imazheve të shumta për të krijuar një pamje panoramike ose me fushë të gjerë. Ky proces përdoret zakonisht në fotografi për të bashkuar imazhet e mbivendosura dhe për të krijuar një panoramë të qetë. Këtu është një përshkrim bazë se si të qepni imazhet duke përdorur OpenCV:

Parapërpunimi i imazhit

Ngarkoni imazhet që dëshironi të qepni duke përdorur cv2.imread() funksionin e OpenCV.

Konvertoni imazhet në shkallë gri duke përdorur cv2.cvtColor() nëse është e nevojshme.

Zbuloni veçoritë kryesore në imazhe duke përdorur algoritme të zbulimit të veçorive si SIFT, ORB ose AKAZE.

Përputhja e veçorive

Përdorni teknikat e përputhjes së veçorive për të gjetur pikat përkatëse midis imazheve.

OpenCV ofron funksione si cv2.BFMatcher() ose cv2.FlannBasedMatcher() për përputhjen e veçorive.

Vlerësimi i Homografisë

Llogaritni matricën e homografisë duke përdorur pikat përkatëse të gjetura në hapin e mëparshëm.

Matrica e homografisë përshkruan transformimin midis dy imazheve.

Deformim dhe Qepje

Përdorni matricën e homografisë për të shtrembëruar njërën nga imazhet për t'u lidhur me tjetrën.

Funksioni cv2.warpPerspective() mund të përdoret për këtë qëllim.

Kombinoni imazhin e deformuar me imazhin tjetër për të krijuar panoramë të qepur.

Përzierje(opsionale)

Aplikoni teknikat e përzierjes së imazheve për të bashkuar pa probleme imazhet e qepura.

Mund të përdoren teknika si përzierja lineare ose përzierja me shumë breza.

Shfaq ose Ruaj

Shfaqni panoramën e qepur duke përdorur cv2.imshow() ose ruajeni duke përdorur cv2.imwrite().

 

Këtu është një shembull i thjeshtuar i kodit që demonstron procesin e qepjes së imazhit duke përdorur 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()  

Ju lutemi vini re se ky shembull është një demonstrim i thjeshtuar. Në praktikë, mund t'ju duhet të trajtoni çështje të tilla si shtrirja e imazhit, përzierja dhe korrigjimi i shtrembërimit për të arritur imazhe panoramike me cilësi të lartë.