web-dev-qa-db-ja.com

OpenCV 2で画像からチャネル数を取得する方法

cv :: Mat Opencvのチャネル数を特定できますか OpenCV 1のこの質問に答えます:画像のMat.channels()メソッドを使用します。

しかし、cv2(2.4.6を使用しています)では、画像データ構造にchannels()メソッドがありません。 Python 2.7を使用しています。

コードスニペット:

cam = cv2.VideoCapture(source)
ret, img = cam.read()
# Here's where I would like to find the number of channels in img.

インタラクティブな試み:

>>> img.channels()
Traceback (most recent call last):
  File "<interactive input>", line 1, in <module>
AttributeError: 'numpy.ndarray' object has no attribute 'channels'
>>> type(img)
<type 'numpy.ndarray'>
>>> img.dtype
dtype('uint8')
>>> dir(img)
['T',
 '__abs__',
 '__add__',
...
 'transpose',
 'var',
 'view']
# Nothing obvious that would expose the number of channels.

助けてくれてありがとう。

15
LarsH

_img.shape_を使用

それはあなたにあらゆる方向のimgの形を提供します。つまり、2D配列(グレースケール画像)の行数、列数。 3D配列の場合は、チャネル数も表示されます。

したがって、len(img.shape)が2つの場合、チャネルは1つです。

len(img.shape)が3を与える場合、3番目の要素はチャネル数を与えます。

詳細については、 ここにアクセス

30
Abid Rahman K

ちょっと遅れましたが、別の簡単な方法があります。

使用する image.ndimソース 、以下のように適切なチャンネル数を提供します:


if image.ndim == 2:

    channels = 1 #single (grayscale)

if image.ndim == 3:

    channels = image.shape[-1]

imagenumpy配列にすぎないためです。ここでOpenCVドキュメントをチェックアウトします: docs

5
abhiTronix

私が知っているように、uはlen(img.shape)ではなくimage.shape [2]を使用してチャネルの数を決定する必要があります。後者は配列の次元を示します。

0
songofhawk