我能否确定cv::Mat Opencv中通道的数量?

33

也许这很基础,但是是否可以知道一个cv::Mat有多少个通道呢?例如,我们加载了一张RGB图像,我知道有3个通道。我执行以下操作,只是为了得到图像的拉普拉斯变换,这是直接从Opencv文档中获取的。

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);
}

将图像转换为灰度后,我们应该只有一个通道。但是我如何确定程序中 abs_dst_gray 的通道数?是否有相应的函数可以实现?还是需要程序员自己编写其他方法来实现?请在这里帮助我。

提前感谢您的帮助。


请看我在另一个帖子中给出的答案。我解释了如何获取矩阵的通道和类型,以及如何访问单个元素:http://stackoverflow.com/questions/7399344/save-cv-16sc2-mat-to-a-file-opencv/22102303#22102303 - Sebastian Schmitz
2个回答

64

调用Mat.channels()

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

输出:

1

这是频道的数量。

另外,尝试:

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

输出:

0

它属于CV_8U(在此处查看第542行)。研究每个definetypes_c.h文件。


这提供了数据类型@William。我如何获取通道数? - Lakshmi Narayanan
1
当然。@LakshmiNarayanan,这里的每个人都愿意帮忙。只要发布问题,如果我有空,我会尝试回答。 - LovaBill
2
@LakshmiNarayanan 请在一个新问题中提出您的另一个疑问。 - hetepeperfan
@hetepeperfan 我已经在这里问过了 http://stackoverflow.com/questions/17364987/knowing-the-value-of-an-mat-element-opencv 如果这很基础,请耐心等待。 - Lakshmi Narayanan
3
威廉的链接似乎已失效,这是一个替代链接:http://ninghang.blogspot.co.uk/2012/11/list-of-mat-type-in-opencv.html。 - Sipty


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接