Ħolqien ta' Ritratti Panoramiċi Stordament Python b'OpenCV

Il-ħjata ta 'immaġini bl-użu ta' Python u OpenCV tinvolvi l-kombinazzjoni ta 'immaġini multipli biex tinħoloq veduta panoramika jew ta' kamp wiesa '. Dan il-proċess huwa komunement użat fil-fotografija biex jgħaqqad immaġini li jikkoinċidu u joħloq panorama bla xkiel. Hawnhekk hawn deskrizzjoni bażika ta' kif tgħaqqad l-immaġini bl-użu ta' OpenCV:

Ipproċessar minn qabel tal-Immaġini

Tagħbija l-immaġini li trid ħjata billi tuża cv2.imread() l-funzjoni ta’ OpenCV.

Ikkonverti immaġini għal skala griża billi tuża cv2.cvtColor() jekk meħtieġ.

Issib karatteristiċi ewlenin fl-immaġini billi tuża algoritmi ta' skoperta ta' karatteristiċi bħal SIFT, ORB, jew AKAZE.

Tqabbil tal-Karatteristiċi

Uża tekniki ta 'tqabbil tal-karatteristiċi biex issib punti korrispondenti bejn l-immaġini.

OpenCV jipprovdi funzjonijiet bħal cv2.BFMatcher() jew cv2.FlannBasedMatcher() għat-tqabbil tal-karatteristiċi.

Stima Omografika

Ikkalkula l-matriċi omografika billi tuża l-punti korrispondenti misjuba fil-pass preċedenti.

Il-matriċi tal-omografija tiddeskrivi t-trasformazzjoni bejn iż-żewġ immaġini.

Warping u Ħjata

Uża l-matriċi tal-omografija biex tgħawweġ waħda mill-immaġini biex tallinja mal-oħra.

Il- cv2.warpPerspective() funzjoni tista 'tintuża għal dan il-għan.

Għaqqad l-immaġni warped ma 'l-immaġni l-oħra biex toħloq il-panorama meħjuta.

Taħlit(Mhux obbligatorju)

Applika tekniki ta 'taħlit ta' immaġni biex tgħaqqad bla xkiel l-immaġini meħjuta.

Jistgħu jintużaw tekniki bħal taħlit lineari jew taħlit multi-band.

Uri jew Issejvja

Uri l-panorama meħjuta billi tuża cv2.imshow() jew issalvaha billi tuża cv2.imwrite().

 

Hawn eżempju ta 'kodiċi simplifikat li juri l-proċess tal-ħjata tal-immaġni bl-użu ta' 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()  

Jekk jogħġbok innota li dan l-eżempju huwa turija simplifikata. Fil-prattika, jista 'jkollok bżonn tieħu ħsieb kwistjonijiet bħall-allinjament tal-immaġni, it-taħlit u l-korrezzjoni tad-distorsjoni biex tikseb immaġini panoramiċi ta' kwalità għolja.