web-dev-qa-db-fra.com

comment obtenir le nombre de canaux d'une image, dans OpenCV 2?

Les réponses à Puis-je déterminer le nombre de canaux dans cv :: Mat Opencv répondez à cette question pour OpenCV 1: vous utilisez la méthode Mat.channels() de l'image.

Mais en cv2 (j'utilise 2.4.6), la structure de données d'image que j'ai n'a pas de méthode channels(). J'utilise Python 2.7.

Extrait de code:

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

Tentative interactive:

>>> 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.

Merci pour toute aide.

15
LarsH

Utilisez img.shape

Il vous donne la forme d'img dans toutes les directions. c'est-à-dire le nombre de lignes, le nombre de colonnes pour un tableau 2D (image en niveaux de gris). Pour le réseau 3D, il vous donne également un nombre de canaux.

Donc, si len(img.shape) vous en donne deux, il n'a qu'un seul canal.

Si len(img.shape) vous en donne trois, le troisième élément vous donne le nombre de canaux.

Pour plus de détails, visitez ici

30
Abid Rahman K

Je suis un peu en retard, mais il existe un autre moyen simple de sortir:

Utilisation image.ndimSource , donnera votre bon nombre de canaux comme ci-dessous:


if image.ndim == 2:

    channels = 1 #single (grayscale)

if image.ndim == 3:

    channels = image.shape[-1]

Puisqu'une image n'est rien d'autre qu'un tableau numpy . Découvrez les documents OpenCV ici: docs

5
abhiTronix

Comme je sais, u devrait utiliser image.shape [2] pour déterminer le nombre de canaux, pas len (img.shape), ce dernier donne les dimensions du tableau.

0
songofhawk