Mari kita mulai dengan apa itu OpenCV. OpenCV atau Open Source Computer Vision Library adalah pustaka sumber terbuka dan gratis untuk digunakan di bawah Apache 2. 0 lisensi. OpenCV terutama digunakan untuk visi komputer, pemrosesan gambar, dan tugas pembelajaran mesin. Perpustakaan ini awalnya dikembangkan oleh Intel pada tahun 1999. OpenCV mendukung berbagai bahasa seperti C++, Python, Java, dll. , dan dapat digunakan di Windows, Linux, Android, dan Mac OS. Awalnya ditulis dalam C++ dan semua perkembangan barunya terjadi di C++. Python, Java, MATLAB digunakan sebagai pembungkus untuk implementasi OpenCV C++ asli
Kualitas terbaik dari OpenCV C++ API dan Python digabungkan untuk membentuk API Python untuk OpenCV yang dikenal sebagai OpenCV-Python. Meskipun Python lebih lambat dari C/C++, Python dapat dengan mudah diperluas dengan C/C++ yang memungkinkan kita menulis kode lebih cepat dan lebih efisien. OpenCV-Python dapat diintegrasikan dengan berbagai pustaka Python seperti Numpy untuk mengidentifikasi pola dan struktur gambar untuk dianalisis
Deteksi objek, pengenalan wajah, estimasi gerakan ego, deteksi gerakan, segmentasi, dll. adalah beberapa aplikasi utama OpenCV. Pustaka juga mencakup peningkatan, pohon keputusan, tetangga terdekat k, hutan acak, mesin vektor dukungan, jaringan saraf dalam, dll.
Mengubah Ukuran GambarMengubah ukuran gambar berarti mengubah ukuran gambar atau mengubah dimensi asli, lebar, tinggi, atau keduanya
Mengubah ukuran gambar melibatkan
- Pengambilan sampel ulang piksel
- Interpolasi piksel baru
- Mempertahankan rasio aspek gambar
Fungsi Ubah Ukuran
Sintaksis
resize(src, dsize[, dst[, fx[, fy[, interpolation]]]])di mana,
Deskripsi metode mengubah ukuran variabel
- Dengan faktor penskalaan
Faktor penskalaan, juga dikenal sebagai faktor skala, adalah angka yang menskalakan atau mengalikan kuantitas, dalam hal ini, lebar dan tinggi gambar. Ini membantu menjaga rasio aspek dan kualitas tampilan. Hasilnya, saat Anda menaikkan atau menurunkan skala gambar, tampilannya tidak terdistorsi
Dalam panduan ini, Anda mempelajari apa arti pengubahan ukuran gambar, dan bagaimana melakukannya menggunakan OpenCV dengan Python. Kami akan tampil
- Menurunkan skala
- Meningkatkan
- Mengubah ukuran lebar saja
- Mengubah ukuran tinggi saja
Juga, kita akan berbicara tentang faktor penskalaan dan interpolasi
Mengubah Ukuran Gambar dengan OpenCV + Python
Saat mengubah ukuran gambar, penting untuk mengetahui rasio aspek asli gambar. Ini karena biasanya, Anda ingin membuat gambar keluaran terlihat sama kecuali ukurannya
Saat mengecilkan gambar, piksel perlu disampling ulang. Ini karena saat ukurannya menyusut, jumlah piksel tidak bisa tetap sama. Karena itu Anda harus "menghapus kelebihan piksel"
Dan saat memperbesar gambar, program harus menambahkan piksel baru. Jika tidak, peningkatan skala tidak dapat dilakukan karena piksel tidak cukup untuk memperbesar gambar
Saat menggunakan OpenCV, ada beberapa teknik yang dapat Anda gunakan untuk mengubah ukuran gambar. Teknik ini membuat gambar terlihat sebagus mungkin saat ukurannya berubah
Sebelum memodifikasi gambar, Anda perlu mempelajari cara membaca gambar ke program terlebih dahulu
Membaca Gambar dengan OpenCV
Untuk membaca gambar menggunakan OpenCV, Anda perlu mengimpor pustaka OpenCV dan menggunakan fungsi imread()
Fungsi imread() mengambil jalur gambar sebagai argumen
Jika skrip Python Anda berada di file yang sama dengan gambar, Anda hanya perlu menentukan nama gambar sebagai jalurnya
Dalam panduan ini, kami bekerja dengan gambar berikut
gambar. jpeg
Misalnya, jika skrip Anda berada di folder yang sama dengan “image. jpeg" Anda dapat membaca gambar ke dalam program Anda dengan
import cv2 img = cv2.imread('image.jpeg')_Sekarang setelah Anda membaca gambarnya, mari ubah ukurannya
Ubah ukuran Gambar dengan cv2. mengubah ukuran() Fungsi
Untuk mengubah ukuran gambar dengan OpenCV, gunakan cv2. mengubah ukuran() fungsi. Dibutuhkan gambar asli, memodifikasinya, dan mengembalikan gambar baru
Sintaks cv2. fungsi resize() adalah
cv2.resize(src, dsize, fx, fy, interpolation)Di mana
- src adalah sumber gambar
- dsize adalah ukuran yang diinginkan dari gambar keluaran. Ini adalah tuple dari dua bilangan bulat
- faktor skala fx [opsional] di sepanjang sumbu horizontal
- faktor skala fy [opsional] di sepanjang sumbu vertikal
- flag interpolasi [opsional] yang menentukan bagaimana piksel keluaran diatur
Sederhananya, kita hanya akan menggunakan dua parameter ini terlebih dahulu
- src
- ukuran
Dengan kata lain, kita akan memanggil cv2. resize() dengan sintaks berikut
cv2.resize(src, (new_width, new_height))(new_width, new_height) adalah parameter ukuran dari sintaks asli
Mari kita mulai dengan memperkecil gambar kita
Menurunkan skala dengan OpenCV
Salah satu cara untuk mengubah ukuran gambar Anda adalah dengan memperkecilnya. Ini berarti Anda mempertahankan rasio aspek gambar tetapi memperkecil gambar
Untuk melakukannya, tentukan faktor penskalaan yang kurang dari 1
Kemudian gandakan lebar dan tinggi gambar asli dengan faktor penskalaan
Terakhir, panggil cv2. resize() fungsi dengan lebar dan tinggi yang diturunkan
Misalnya, mari perkecil gambar menjadi 25% dari ukuran aslinya dan tampilkan menggunakan fungsi imshow()
import cv2 img = cv2.imread('image.jpeg') p = 0.25 new_width = int(img.shape[1] * p) new_height = int(img.shape[0] * p) resized = cv2.resize(img, (new_width, new_height)) cv2.imshow(f"Elephants at scale {p}", resized) # Hide the image window with any key press cv2.waitKey() cv2.destroyAllWindows()_Keluaran
Lalu mari kita lihat cara meningkatkan gambar
Peningkatan skala dengan OpenCV
Cara lain untuk mengubah ukuran gambar Anda adalah dengan meningkatkannya. Ini berarti Anda mempertahankan rasio aspek gambar tetapi memperbesar gambar
Untuk melakukannya, tentukan faktor penskalaan yang lebih besar dari 1
Kemudian gandakan lebar dan tinggi gambar asli dengan faktor penskalaan
Terakhir, panggil cv2. resize() fungsi dengan lebar dan tinggi yang ditingkatkan
Misalnya, mari skala gambar hingga 150% dari gambar asli
import cv2 img = cv2.imread('image.jpeg') p = 1.5 new_width = int(img.shape[1] * p) new_height = int(img.shape[0] * p) resized = cv2.resize(img, (new_width, new_height)) cv2.imshow(f"Elephants at scale {p}", resized) cv2.waitKey() cv2.destroyAllWindows()Keluaran
Sekarang Anda mengerti cara memperbesar dan memperkecil gambar menggunakan OpenCV dan Python
Selanjutnya, mari kita lihat cara mengubah ukuran gambar dengan hanya mengubah lebar atau tinggi gambar
Ubah Lebar Saja
Jika Anda ingin mengubah lebar gambar, panggil cv2. resize() dengan tinggi asli dan lebar khusus
Sebagai contoh
import cv2 img = cv2.imread('image.jpeg') new_width = 400 resized = cv2.resize(img, (new_width, img.shape[0])) cv2.imshow("Elephants", resized) cv2.waitKey() cv2.destroyAllWindows()_Keluaran
Terakhir, mari kita lihat bagaimana Anda dapat mengubah tinggi gambar saja
Ubah Ketinggian Saja
Jika Anda ingin mengubah tinggi gambar, panggil cv2. resize() dengan lebar asli dan tinggi khusus
Sebagai contoh
import cv2 img = cv2.imread('image.jpeg') new_height = 300 resized = cv2.resize(img, (img.shape[1], new_height)) cv2.imshow("Elephants", resized) cv2.waitKey() cv2.destroyAllWindows()Keluaran
Luar biasa. Sekarang Anda memahami dasar-dasar mengubah ukuran gambar menggunakan OpenCV dan Python
Selanjutnya, mari kita lihat pendekatan lain untuk menskalakan gambar menggunakan faktor penskalaan
Faktor Penskalaan
Sebelumnya Anda telah mempelajari cara menskalakan gambar dengan menentukan koefisien penskalaan sebagai variabel terpisah dan dengan mengalikan dimensi asli dengannya
Tapi ada cara alternatif, yang mungkin sedikit lebih estetis dalam hal kualitas kode
Sintaks untuk cv2. fungsi resize() mencakup dua parameter opsional fx dan fy. Ini adalah faktor penskalaan dalam arah x dan y
Alih-alih menentukan ukuran baru, Anda dapat menggunakan fx dan fy sebagai faktor penskalaan
Misalnya, untuk memperkecil ukuran gambar hingga 25% dari ukuran aslinya, Anda dapat menentukan faktor penskalaan seperti sebelumnya. Namun alih-alih mengalikan dimensi gambar asli dengannya, Anda dapat menyetel faktor penskalaan ke fx dan fy secara langsung
Jika Anda melakukan ini, atur argumen dsize Tidak ada
import cv2 img = cv2.imread('image.jpeg') p = 0.25 resized = cv2.resize(img, None, fx=p, fy=p) cv2.imshow("Down-Scaled Image", resized) # Hide the image window with any key press cv2.waitKey() cv2.destroyAllWindows()_Keluaran
Metode Interpolasi OpenCV
Topik terakhir yang akan kita bahas dalam tutorial ini adalah metode interpolasi
Saat memperbesar gambar, diperlukan interpolasi
Ini karena jika tidak, program perlu menarik piksel baru begitu saja saat memperbesar gambar
Seperti yang mungkin Anda ingat, sintaks cv2. resize() menyertakan interpolasi parameter opsional
cv2.resize(src, dsize, fx, fy, interpolation)Metode interpolasi ini digunakan untuk mengubah ukuran gambar untuk mempertahankan kualitas gambar
Setiap metode interpolasi memiliki hasil imbang dan kontra sendiri. Seseorang bisa cepat tetapi menghasilkan hasil yang buruk. Yang lain mungkin lambat tetapi menghasilkan hasil yang lebih berkualitas
Anda harus memilih metode interpolasi berdasarkan apa yang Anda butuhkan. Jika Anda ingin memperbesar banyak gambar secepat mungkin, bersiaplah untuk mengorbankan kualitas. Jika ingin menjaga kualitas, bersiaplah untuk kehilangan efisiensi
Berikut adalah metode interpolasi yang disediakan oleh OpenCV
- import cv2 img = cv2.imread('image.jpeg')2 menggunakan relasi area piksel untuk resampling. Ini adalah metode terbaik untuk mengurangi ukuran gambar. Saat digunakan untuk memperbesar gambar, ini menggunakan metode import cv2 img = cv2.imread('image.jpeg')3
- import cv2 img = cv2.imread('image.jpeg')_4 menggunakan interpolasi bikubik untuk mengubah ukuran. Metode ini melakukan perhitungan berdasarkan 4×4 piksel tetangga untuk piksel. Dibutuhkan rata-rata tertimbang dari 16 piksel ini untuk membuat piksel baru
- import cv2 img = cv2.imread('image.jpeg')_5 mirip dengan import cv2 img = cv2.imread('image.jpeg')6 interpolasi. Namun, import cv2 img = cv2.imread('image.jpeg')_6 hanya menggunakan 2×2 piksel tetangga untuk mendapatkan bobot rata-rata piksel
- import cv2 img = cv2.imread('image.jpeg')_8 menggunakan konsep tetangga terdekat untuk interpolasi. Ini hanya menggunakan satu piksel tetangga dari gambar untuk interpolasi
Mari kita bandingkan hasil dari setiap jenis interpolasi. Gambar-gambar ini dirender dengan kode berikut yang menskalakan gambar asli hingga 200%
import cv2 img = cv2.imread('image.jpeg')_1Jangan ragu untuk mengomentari/menghapus komentar pada baris berdasarkan metode interpolasi mana yang ingin Anda gunakan
INTER_NEARESTINTER_CUBICINTER_LINEARINTER_AREAKarena gambarnya kecil di sini, tidak ada perbedaan yang jelas. Namun, perbedaannya ada di sana
Misalnya, gambar pertama jelas lebih tajam dari gambar terakhir
Agar tetap dalam cakupan, kita tidak akan berbicara tentang metode interpolasi lebih lanjut
Untuk melihat perbedaan metode interpolasi lebih jelas, silakan cek artikel ini
Kesimpulan
Hari ini Anda belajar cara mengubah ukuran gambar menggunakan OpenCV dan Python
Untuk rekap
- Untuk memperbesar/memperkecil, tentukan faktor penskalaan dan kalikan lebar dan tinggi dengannya di cv2. mengubah ukuran() fungsi
- Untuk hanya mengubah lebar, panggil cv2. resize() dengan tinggi asli dan lebar khusus
- Untuk hanya mengubah ketinggian, panggil cv2. resize() dengan lebar asli dan tinggi khusus
Untuk menyesuaikan kualitas gambar keluaran, coba/pelajari berbagai metode interpolasi yang tersedia di OpenCV