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.
感谢您的帮助。
答案 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)来确定通道数,后者确定数组的尺寸。