cv2
の画像のサイズをPython OpenCV(numpy)で取得する方法。 numpy.shape()
より正しい方法がありますか?どのようにフォーマットの寸法でそれを取得する:(幅、高さ)のリスト?Python opencv2(cv2)ラッパー画像サイズを取得しますか?
おかげ
cv2
の画像のサイズをPython OpenCV(numpy)で取得する方法。 numpy.shape()
より正しい方法がありますか?どのようにフォーマットの寸法でそれを取得する:(幅、高さ)のリスト?Python opencv2(cv2)ラッパー画像サイズを取得しますか?
おかげ
cv2
は、画像を操作するためのnumpy
を使用していますので、画像のサイズを取得するための適切かつ最善の方法は、numpy.shape
を使用しています。あなたが二値画像で働いていた場合には、img
は、2次元を持つことになります
>>> import numpy as np
>>> import cv2
>>> img = cv2.imread('foo.jpg')
>>> height, width, channels = img.shape
>>> print height, width, channels
600 800 3
、したがって、あなたはにコードを変更する必要があります:あなたはここで、BGRの画像で作業していると仮定すると、一例である私はheight, width = img.shape
ああ、どうぞ。イメージがBGRまたはモノであると仮定するのではなく、特にOPが深さに関心がないので、一般的に 'h、w = img.shape [:2]'と書いてください。 (どちらも私ではなかった)。詳細は私の答えを見てください。 –
これは役に立ちましたか?http://docs.opencv.org/3.0-beta/doc/py_tutorials/py_core/py_basic_ops/py_basic_ops.html#accessing-image-properties – djwbrown
このサイズを得るための「より良い」方法はないのではないかと心配していますが、あまり苦痛ではありません。
もちろん、コードはバイナリ/モノラルイメージとマルチチャネルイメージの両方に対して安全でなければなりませんが、イメージの主次元は常にnumpy配列の形になります。読みやすいようにするか、これを入力するのをやめたくない場合は、関数で囲み、好みの名前を付けることができます。 cv_size
:
import numpy as np
import cv2
# ...
def cv_size(img):
return tuple(img.shape[1::-1])
あなたはターミナル/ ipythonを使っているのであれば、あなたもラムダとそれを表現することができます:対話的に作業しながらdef
と
>>> cv_size = lambda img: tuple(img.shape[1::-1])
>>> cv_size(img)
(640, 480)
ライティング機能は楽しみではありません。
編集
もともと私は[:2]
を使用してOKだったと思ったが、numpyの形状が(height, width[, depth])
であり、我々は(width, height)
を必要とし、例えばなどcv2.resize
が期待しているので、[1::-1]
を使用する必要があります。 [:2]
よりも記憶に残っていない。とにかく逆スライスを覚えているのは誰ですか?
'numpy.shape'は呼び出し可能ではありません。それは単純なタプルです。不幸なことに、それは3つまたは2つの要素の長さにすることができます。 –