Mencipta Foto Panoramik Menakjubkan dengan Python OpenCV

Mencantum imej menggunakan Python dan OpenCV melibatkan penggabungan berbilang imej untuk mencipta paparan panorama atau medan luas. Proses ini biasanya digunakan dalam fotografi untuk menggabungkan imej bertindih dan mencipta panorama yang lancar. Berikut ialah garis asas cara mencantum imej menggunakan OpenCV:

Prapemprosesan Imej

Muatkan imej yang anda ingin jahit menggunakan cv2.imread() fungsi OpenCV.

Tukar imej kepada skala kelabu menggunakan cv2.cvtColor() jika perlu.

Kesan ciri utama dalam imej menggunakan algoritma pengesanan ciri seperti SIFT, ORB atau AKAZE.

Padanan Ciri

Gunakan teknik pemadanan ciri untuk mencari titik yang sepadan antara imej.

OpenCV menyediakan fungsi seperti cv2.BFMatcher() atau cv2.FlannBasedMatcher() untuk pemadanan ciri.

Anggaran Homografi

Kira matriks homografi menggunakan titik sepadan yang terdapat dalam langkah sebelumnya.

Matriks homografi menerangkan transformasi antara dua imej.

Meleding dan Menjahit

Gunakan matriks homografi untuk meledingkan salah satu imej agar diselaraskan dengan imej yang lain.

Fungsi ini cv2.warpPerspective() boleh digunakan untuk tujuan ini.

Gabungkan imej melencong dengan imej lain untuk mencipta panorama yang dijahit.

Pengadunan(Pilihan)

Gunakan teknik gabungan imej untuk menggabungkan imej yang dicantum dengan lancar.

Teknik seperti pengadunan linear atau pengadunan berbilang jalur boleh digunakan.

Paparkan atau Simpan

Paparkan panorama yang dijahit menggunakan cv2.imshow() atau simpannya menggunakan cv2.imwrite().

 

Berikut ialah contoh kod ringkas yang menunjukkan proses jahitan imej menggunakan 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()  

Sila ambil perhatian bahawa contoh ini ialah demonstrasi yang dipermudahkan. Dalam amalan, anda mungkin perlu menangani isu seperti penjajaran imej, pengadunan dan pembetulan herotan untuk mencapai imej panorama berkualiti tinggi.