Membuat Foto Panorama Menakjubkan dengan Python OpenCV

Menggabungkan gambar menggunakan Python dan OpenCV melibatkan penggabungan beberapa gambar untuk membuat tampilan panorama atau bidang lebar. Proses ini biasa digunakan dalam fotografi untuk menggabungkan gambar yang tumpang tindih dan menciptakan panorama yang mulus. Berikut garis besar dasar cara menjahit gambar menggunakan OpenCV:

Prapemrosesan Gambar

Muat gambar yang ingin Anda gabungkan menggunakan cv2.imread() fungsi OpenCV.

Ubah gambar menjadi skala abu-abu menggunakan cv2.cvtColor() jika perlu.

Deteksi fitur utama dalam gambar menggunakan algoritme deteksi fitur seperti SIFT, ORB, atau AKAZE.

Pencocokan Fitur

Gunakan teknik pencocokan fitur untuk menemukan titik yang sesuai di antara gambar.

OpenCV menyediakan fungsi seperti cv2.BFMatcher() atau cv2.FlannBasedMatcher() untuk pencocokan fitur.

Estimasi Homografi

Hitung matriks homografi menggunakan titik-titik yang sesuai yang ditemukan pada langkah sebelumnya.

Matriks homografi menggambarkan transformasi antara dua gambar.

Warping dan Jahitan

Gunakan matriks homografi untuk membengkokkan salah satu gambar agar sejajar dengan yang lain.

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

Gabungkan gambar yang dibengkokkan dengan gambar lain untuk membuat panorama yang digabungkan.

Pencampuran(Opsional)

Terapkan teknik pencampuran gambar untuk menggabungkan gambar yang dijahit dengan mulus.

Teknik seperti pencampuran linier atau pencampuran multi-band dapat digunakan.

Tampilkan atau Simpan

Tampilkan panorama yang digabungkan menggunakan cv2.imshow() atau simpan menggunakan cv2.imwrite().

 

Berikut adalah contoh kode sederhana yang mendemonstrasikan proses penggabungan gambar 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()  

Harap dicatat bahwa contoh ini adalah demonstrasi yang disederhanakan. Dalam praktiknya, Anda mungkin perlu menangani masalah seperti penyelarasan gambar, pencampuran, dan koreksi distorsi untuk mendapatkan gambar panorama berkualitas tinggi.