Python OpenCV(numpy)のcv2
ラッパーで画像のサイズを取得する方法。 numpy.shape()
よりも正しい方法がありますか。フォーマット寸法で取得する方法:(幅、高さ)リスト?
ありがとう
cv2
は、画像の操作にnumpy
を使用するため、画像のサイズを取得するための適切かつ最良の方法は、numpy.shape
を使用することです。 BGRイメージで作業していると仮定すると、次の例があります。
>>> import numpy as np
>>> import cv2
>>> img = cv2.imread('foo.jpg')
>>> height, width, channels = img.shape
>>> print height, width, channels
600 800 3
バイナリイメージを使用していた場合、img
には2つのディメンションがあるため、コードをheight, width = img.shape
に変更する必要があります。
このサイズを取得する「より良い」方法はないのではないかと心配していますが、それほど苦痛はありません。
もちろん、コードはバイナリ/モノラル画像とマルチチャンネル画像の両方に対して安全でなければなりませんが、画像の主要な次元は常にnumpy配列の形状で最初に来ます。読みやすさを選択する場合、またはこれを入力する必要がない場合は、関数でラップして、好きな名前を付けることができます。 cv_size
:
import numpy as np
import cv2
# ...
def cv_size(img):
return Tuple(img.shape[1::-1])
端末/ ipythonを使用している場合は、ラムダで表現することもできます。
>>> cv_size = lambda img: Tuple(img.shape[1::-1])
>>> cv_size(img)
(640, 480)
def
を使用して関数を記述することは、インタラクティブに作業している間は楽しくありません。
編集
もともと[:2]
を使用しても問題ないと思っていましたが、numpyの形状は(height, width[, depth])
であり、(width, height)
が必要です。 cv2.resize
は期待するので、[1::-1]
を使用する必要があります。 [:2]
よりも記憶に残りません。とにかく逆スライスを覚えているのは誰ですか?