Can I determine the number of channels in cv::Mat Opencv

Lakshmi Narayanan picture Lakshmi Narayanan · Jun 28, 2013 · Viewed 54.8k times · Source

This maybe rudimentary, but is it possible to know how many channels a cv::Mat has? For eg, we load an RGB image, I know there are 3 channels. I do the following operations, just to get the laplacian of the image, which is straight from the Opencv Documentation.

int main(int argc, char **argv)
{
     Mat src = imread(argv[1],1),src_gray,dst_gray,abs_dst_gray;

     cvtColor(src,src_gray,COLOR_BGR2GRAY);
     GaussianBlur( src, src, Size(3,3), 0, 0, BORDER_DEFAULT );
     Laplacian(src_gray,dst_gray,ddepth,kernel_size,scale,delta,BORDER_DEFAULT);
     convertScaleAbs(dst_gray,abs_dst_gray);
}

After converting to Grayscale, we should have only one channel. But how can I determine the number of channels of abs_dst_gray in program? Is there any function to do this? Or is it possible through any other method, which should be written by the programmer? Please help me here.

Thanks in advance.

Answer

LovaBill picture LovaBill · Jun 28, 2013

Call Mat.channels() :

cv::Mat img(1,1,CV_8U,cvScalar(0));
std::cout<<img.channels();

Output:

1

which is the number of channels.

Also, try:

std::cout<<img.type();

Output:

0

which belongs to CV_8U (look here at line 542). Study file types_c.h for each define.