Lakshmi Narayanan
Lakshmi Narayanan

Reputation: 5342

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

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.

Upvotes: 33

Views: 74217

Answers (2)

hetepeperfan
hetepeperfan

Reputation: 4411

you might use:

Mat::channels()

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

Upvotes: 14

LovaBill
LovaBill

Reputation: 5139

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.

Upvotes: 65

Related Questions