32

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.

LovaBill
  • 5,107
  • 1
  • 24
  • 32
Lakshmi Narayanan
  • 5,220
  • 13
  • 50
  • 92
  • Have a look at the anser i gave in another thread. I explained how to get the cannels and type of a matrix and how you can access single elements afterwards: http://stackoverflow.com/questions/7399344/save-cv-16sc2-mat-to-a-file-opencv/22102303#22102303 – Sebastian Schmitz Mar 27 '14 at 11:08

2 Answers2

63

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.

LovaBill
  • 5,107
  • 1
  • 24
  • 32
14

you might use:

Mat::channels()

http://docs.opencv.org/modules/core/doc/basic_structures.html#mat-channels

hetepeperfan
  • 4,292
  • 1
  • 29
  • 47