The answers at Can I determine the number of channels in cv::Mat Opencv answer this question for OpenCV 1: you use the Mat.channels()
method of the image.
I'm kind of late but there is another simple way out there:
Use image.ndim
Source, will give your right number of channels as below:
if image.ndim == 2:
channels = 1 #single (grayscale)
if image.ndim == 3:
channels = image.shape[-1]
Since a image is a nothing but a numpy array. Checkout OpenCV docs here: docs
As i know, u should use image.shape[2] to determine number of channels, not len(img.shape), the latter gives the dimensions of the array.
Use img.shape
It provides you the shape of img in all directions. ie number of rows, number of columns for a 2D array (grayscale image). For 3D array, it gives you number of channels also.
So if len(img.shape)
gives you two, it has a single channel.
If len(img.shape)
gives you three, third element gives you number of channels.
For more details, visit here