Cara mendapatkan ukuran gambar dalam cv2
pembungkus dengan Python OpenCV (numpy). Apakah ada cara yang benar untuk melakukan itu selain numpy.shape()
. Bagaimana saya bisa mendapatkannya dalam format dimensi ini: daftar (lebar, tinggi)?
98
numpy.shape
tidak bisa dipanggil. Itu hanya sebuah datarantuple
. Sayangnya, panjangnya bisa 3 atau 2 elemen.Jawaban:
cv2
digunakannumpy
untuk memanipulasi gambar, jadi cara yang tepat dan terbaik untuk mendapatkan ukuran gambar adalah menggunakannumpy.shape
. Dengan asumsi Anda bekerja dengan gambar BGR, berikut ini contohnya:Jika Anda bekerja dengan gambar biner,
img
akan memiliki dua dimensi, dan oleh karena itu Anda harus mengubah kode ke:height, width = img.shape
sumber
h, w = img.shape[:2]
, terutama karena OP tidak tertarik secara mendalam. (Saya juga tidak). Lihat jawaban saya untuk lebih jelasnya.Saya khawatir tidak ada cara yang "lebih baik" untuk mendapatkan ukuran ini, namun tidak terlalu menyakitkan.
Tentu saja kode Anda harus aman untuk gambar biner / mono serta gambar multi-saluran, tetapi dimensi utama gambar selalu didahulukan dalam bentuk numpy array. Jika Anda memilih untuk dibaca, atau tidak ingin repot mengetik ini, Anda dapat membungkusnya dalam sebuah fungsi, dan memberinya nama yang Anda suka, misalnya
cv_size
:Jika Anda menggunakan terminal / ipython, Anda juga dapat mengekspresikannya dengan lambda:
Fungsi menulis dengan
def
tidak menyenangkan saat bekerja secara interaktif.Edit
Awalnya saya berpikir bahwa penggunaan
[:2]
itu OK, tetapi bentuknya yang numpy(height, width[, depth])
, dan kita perlu(width, height)
, seperti yangcv2.resize
diharapkan, jadi - kita harus menggunakan[1::-1]
. Bahkan kurang berkesan dari[:2]
. Dan siapa yang ingat mengiris terbalik?sumber
img.shape[:2][::-1]