如何从OpenCV 2中获取图像的通道数?

时间:2013-09-28 03:22:35

标签: python image opencv channels

Can I determine the number of channels in 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.

感谢您的帮助。

3 个答案:

答案 0 :(得分:29)

使用img.shape

它为您提供各方向的img形状。即行数,2D阵列的列数(灰度图像)。对于3D阵列,它还为您提供了多个通道。

因此,如果len(img.shape)给你两个,它就有一个频道。

如果len(img.shape)给你三个,第三个元素会给你通道数。

有关详细信息,请visit here

答案 1 :(得分:4)

我有点晚了,但是还有另外一种简单的方法:

使用image.ndim Source,将为您提供正确的频道数,如下所示:


if image.ndim == 2:

    channels = 1 #single (grayscale)

if image.ndim == 3:

    channels = image.shape[-1]

由于图像只是一个 numpy 数组。在此处签出OpenCV文档:docs

答案 2 :(得分:0)

我知道,您应该使用image.shape [2]来确定通道数,而不是len(img.shape)来确定通道数,后者确定数组的尺寸。