Python mengubah ukuran gambar menjaga rasio aspek opencv

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 Gambar

Mengubah 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
  1. 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

cv2.resize(src, dsize, fx, fy, interpolation)

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')
_1

Jangan ragu untuk mengomentari/menghapus komentar pada baris berdasarkan metode interpolasi mana yang ingin Anda gunakan

INTER_NEARESTINTER_CUBICINTER_LINEARINTER_AREA

Karena 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

Bagaimana cara mengubah ukuran gambar dengan tetap mempertahankan rasio aspek gambar di OpenCV?

Menurunkan skala dengan OpenCV . 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.

Bagaimana cara mengubah ukuran gambar dengan rasio aspek di Python OpenCV?

Untuk mengubah ukuran gambar dengan Python, Anda dapat menggunakan cv2. resize() fungsi pustaka OpenCV cv2 . Mengubah ukuran, secara default, hanya mengubah lebar dan tinggi gambar. Rasio aspek dapat dipertahankan atau tidak, berdasarkan kebutuhan.

Bagaimana cara mengubah ukuran gambar tanpa kehilangan rasio aspek dengan Python?

Cara Mengubah Ukuran Gambar dalam Rasio Aspek Tetap dengan Pustaka PIL Python .
Garis pertama. Tentukan angka tetap untuk membuat rasio
Baris kedua. Buka gambar
Baris ketiga. Buat persentase tinggi sesuai dengan nilai tetap Anda
Baris keempat. Buat lebar gambar dengan mengalikannya dengan nilai tinggi proporsional

Bagaimana Anda menjaga rasio aspek saat gambar diubah ukurannya?

Contoh ulang gambar .
Pilih Gambar > Ubah Ukuran > Ukuran Gambar
Pilih Resample Image, dan pilih metode interpolasi. Tetangga terdekat. .
Untuk mempertahankan rasio aspek saat ini, pilih Batasi Proporsi. .
Di Dimensi Piksel, masukkan nilai untuk Lebar dan Tinggi. .
Klik OK untuk mengubah dimensi piksel dan sampel ulang gambar