Farih.co.id
Home Programming Cara Membuat Panorama Menakjubkan Dengan Python dan OpenCV

Cara Membuat Panorama Menakjubkan Dengan Python dan OpenCV

panoramic view of buildings and python logo

Fotografi panorama adalah teknik menangkap bidang pandang yang lebih luas yang tidak dapat dicapai oleh satu foto. Teknik ini menyatukan banyak gambar untuk membuat satu gambar yang menangkap seluruh pemandangan dengan cara yang imersif.


Dengan bantuan Python, Anda dapat mengotomatiskan proses ini dan membuat panorama indah dengan mudah.


Menyiapkan Lingkungan Python Anda

Untuk menindaklanjuti, Anda harus memiliki pemahaman dasar tentang Python. Luncurkan IDE Python apa pun dan buat lingkungan virtual baru. Buat file Python baru. Dan di terminal, jalankan perintah berikut untuk menginstal OpenCV.

 
pip install opencv-contrib-python

Anda akan menggunakan opencv-contrib-python perpustakaan untuk memuat gambar dan memanipulasinya. Ini memiliki cv2.Stitcher kelas yang akan Anda gunakan untuk membuat panorama.

Kode sumber lengkap dan contoh gambar yang digunakan dalam artikel ini tersedia di sini repositori GitHub.

Mengimpor Perpustakaan yang Diperlukan

Impor cv2 Dan os modul ke dalam skrip Anda. Anda akan menggunakan OS untuk menavigasi melalui jalur sistem.

 import cv2
import os

Modul OS adalah modul bawaan Python. Inilah alasan mengapa Anda tidak perlu menginstalnya secara eksternal.

Memuat Gambar

Buat fungsi untuk memuat gambar yang ingin Anda gabungkan. Pertama, buat daftar kosong yang akan menyimpan gambar awal. Kemudian lewati setiap file di jalur folder untuk memeriksa apakah file tersebut adalah gambar. Jika itu adalah gambar, muat dan tambahkan ke daftar gambar.

 
def load_images(folder_path):
    
    images = []
    for filename in os.listdir(folder_path):
        
        if filename.endswith('.jpg') or filename.endswith('.png'):
            
            image = cv2.imread(os.path.join(folder_path, filename))
            images.append(image)
    return images

Anda dapat menambahkan lebih banyak format file gambar untuk mendiversifikasi program Anda. Kode ini hanya akan mencari .jpg Dan .png format file.

Mengubah Ukuran Gambar untuk Jahitan Seragam dan Pemrosesan Lebih Cepat

Buat fungsi yang akan mengubah ukuran daftar gambar. Fungsi akan mengulang setiap gambar dalam daftar dan mengubah ukurannya. Terakhir, tambahkan gambar yang diubah ukurannya ke daftar baru.

 
def resize_images(images, width, height):
    resized_images = []
    for image in images:
        resized_image = cv2.resize(image, (width, height))
        resized_images.append(resized_image)
    return resized_images

Mengubah ukuran memastikan jahitan gambar seragam. Ini juga mengurangi ukuran file untuk pemrosesan lebih cepat.

Menggunakan Modul Stitcher OpenCV untuk Menjahit Gambar

Buat fungsi untuk menyatukan gambar yang diubah ukurannya. Teknik ini biasa dikenal dengan pembuatan panorama. Fungsi ini akan mengambil daftar gambar sebagai masukan. Menggunakan Mesin penjahit modul untuk menjahit mereka bersama-sama. Terakhir, fungsi tersebut akan mengembalikan gambar yang digabungkan dan kode status.

 
def stitch_images(images):
    stitcher = cv2.Stitcher.create()
    (status, stitched_image) = stitcher.stitch(images)
    if status == cv2.STITCHER_OK:
        return stitched_image
    else:
        return None

Jika penjahitan berhasil (seperti yang ditunjukkan oleh cv2.STITCHER_OK kode status), fungsi akan mengembalikan gambar yang digabungkan. Jika tidak, itu akan kembali Tidak ada.

Memotong Gambar yang Dijahit

Buat fungsi yang akan mengambil gambar yang dijahit dan mengembalikannya setelah memotongnya. Pertama, ubah gambar yang digabungkan menjadi skala abu-abu. Kemudian terapkan ambang batas biner untuk membuat gambar biner. Terakhir, temukan kontur terbesar pada citra biner dan hitung persegi panjang pembatasnya.

 
def crop_image(image):
    gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY)[1]
    contours = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)[0]
    x, y, w, h = cv2.boundingRect(contours[0])
    cropped_image = image[y:y + h, x:x + w]
    return cropped_image

Gambar yang dijahit dipotong menggunakan persegi panjang pembatas.

Melihat Pratinjau dan Menyimpan Gambar yang Digabung Menggunakan OpenCV

Buat fungsi yang akan menampilkan gambar yang digabungkan dalam jendela interaktif dan akan menyimpannya ke disk.

 
def preview_and_save_image(image, folder_path, folder_name):
    
    cv2.namedWindow('Stitched Image', cv2.WINDOW_NORMAL)
    cv2.imshow('Stitched Image', image)
    cv2.waitKey(0)

    
    output_filename = os.path.join(folder_path, folder_name + '_panorama.jpg')
    cv2.imwrite(output_filename, image)
    print('Stitched image saved for folder:', folder_name)

Gambar panorama disimpan dalam folder yang sama yang berisi gambar aslinya.

Mengontrol Alur Program Anda

Buat fungsi yang akan mengontrol aliran program Anda. Ini akan memuat semua gambar dari folder yang ditentukan. Ubah ukuran dan gabungkan keduanya. Pangkas gambar yang digabungkan, tampilkan pratinjaunya, lalu simpan ke disk. Jika ada kurang dari dua gambar dalam folder, fungsi akan mencetak pesan kesalahan dan mengembalikannya tanpa melakukan penjahitan atau penyimpanan.

 
def stitch_folder(folder_path, width=800, height=800):
    
    
    images = load_images(folder_path)

    
    if len(images) < 2:
        print('Not enough images in folder:', folder_path)
        return

    
    resized_images = resize_images(images, width, height)

    
    stitched_image = stitch_images(resized_images)
    if stitched_image is None:
        print('Stitching failed for folder:', folder_path)
        return

    
    cropped_image = crop_image(stitched_image)

    
    folder_name = os.path.basename(folder_path)
    preview_and_save_image(cropped_image, folder_path, folder_name)

Lewati jalur folder yang berisi gambar yang ingin Anda gabungkan.

stitch_folder('sample_images')

Gambar yang Anda gunakan harus berisi fitur yang tumpang tindih. Fitur ini dapat berupa apa saja, mulai dari bangunan terkenal hingga pola tekstur pada gambar. OpenCV menggunakannya sebagai titik referensi untuk menyelaraskan gambar.

Tanpa fitur ini, akan sulit bagi OpenCV untuk menyelaraskan gambar dan membuat panorama tanpa batas.

Menguji Program Anda

Kumpulkan gambar yang ingin Anda ubah menjadi gambar panorama. Pastikan bahwa mereka memiliki fitur yang tumpang tindih.

Lihatlah bukit di gambar pertama ini.

Gambar pemandangan dengan bukit ditampilkan

Pada gambar kedua ini, bukitnya sedikit terlihat. Ini menciptakan fitur yang tumpang tindih.

Gambar pemandangan dengan bangunan dan bukit sedikit terlihat

Simpan gambar ke folder. Lewati jalur folder ke stitch_folder fungsi untuk menjahit. Dan kemudian jalankan programnya.

Gambar panorama sebagai output dari suatu program

Program ini menyatukan gambar dan membuat gambar panorama dengan tampilan pemandangan yang lebih luas. Perhatikan bahwa untuk membuat gambar panorama di atas, sembilan gambar digunakan yang ada di repositori GitHub yang disebutkan di atas.

Manipulasi Gambar Menggunakan OpenCV

Membuat panorama mendemonstrasikan beberapa dari banyak teknik manipulasi gambar yang ditawarkan OpenCV. Ada lebih banyak teknik yang dapat Anda gunakan untuk memanipulasi gambar agar sesuai dengan kebutuhan Anda. Mengerjakan lebih banyak proyek yang melibatkan manipulasi gambar akan membantu Anda meningkatkan keterampilan visi komputer secara umum.

Comment
Share:

Leave a Reply

Your email address will not be published. Required fields are marked *

Ad