回答:
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
h, w = img.shape[:2]OPが深さに関心がない、特にとして、。(私もいませんでした)。詳細については、私の回答を参照してください。
このサイズを取得するための「より良い」方法はないと思いますが、それほど苦痛はありません。
もちろん、コードはバイナリ/モノ画像とマルチチャネル画像の両方に対して安全でなければなりませんが、画像の主要な次元は常に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]は大丈夫だと思っていましたが、でこぼこの形状は問題(height, width[, depth])なく(width, height)、たとえばcv2.resize期待どおりに必要なので、使用する必要があります[1::-1]。よりも記憶に残る[:2]。とにかく誰が逆スライシングを覚えていますか?
img.shape[:2][::-1]
numpy.shape呼び出し可能ではありません。それは単なるプレーンtupleです。不愉快なことに、それは3または2要素の長さのどちらかです。