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)?
Jawaban:
cv2
digunakan numpy
untuk memanipulasi gambar, jadi cara yang tepat dan terbaik untuk mendapatkan ukuran gambar adalah menggunakan numpy.shape
. Dengan asumsi Anda bekerja dengan gambar BGR, berikut ini contohnya:
>>> import numpy as np
>>> import cv2
>>> img = cv2.imread('foo.jpg')
>>> height, width, channels = img.shape
>>> print height, width, channels
600 800 3
Jika Anda bekerja dengan gambar biner, img
akan memiliki dua dimensi, dan oleh karena itu Anda harus mengubah kode ke:height, width = img.shape
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
:
import numpy as np
import cv2
# ...
def cv_size(img):
return tuple(img.shape[1::-1])
Jika Anda menggunakan terminal / ipython, Anda juga dapat mengekspresikannya dengan lambda:
>>> cv_size = lambda img: tuple(img.shape[1::-1])
>>> cv_size(img)
(640, 480)
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 yang cv2.resize
diharapkan, jadi - kita harus menggunakan [1::-1]
. Bahkan kurang berkesan dari [:2]
. Dan siapa yang ingat mengiris terbalik?
img.shape[:2][::-1]
numpy.shape
tidak bisa dipanggil. Itu hanya sebuah datarantuple
. Sayangnya, panjangnya bisa 3 atau 2 elemen.