引言
在理解OpenCV中的数据类型如,CV_8UC1、CV_8UC2、CV_8UC3等时,我有疑惑:
这个‘8’,表示的是每个通道都是8位???还是所有通道加起来一共才8位???
以CV_8UC3为例:如果这个8表示的是每个通道都是8位,那么这个矩阵的每个元素都是24位;如果这个8表示的是所有通道加起来一共才8位,那么这个矩阵的每个元素都是8位。
结论
先说结论:以CV_8UC3为例,这个8表示的是每个通道都是8位,这个矩阵的每个元素(像素点)都是24位。
验证
测试程序:
#include<iostream>
#include<opencv2\opencv.hpp>
using namespace std;
using namespace cv;
int main() {
cv::Mat a(4, 4, CV_8UC3, cv::Scalar(1, 2, 3));
cout << a << endl;
//
cout << "矩阵的通道数=" << a.channels() << endl;//channels()矩阵的通道数,也即矩阵中每个元素(像素点)所含有的通道数
cout << "每个元素的字节数/每个像素点的字节数=" << a.elemSize() << endl;//elemSize()每个元素的字节数,也即每个像素点所含有的字节数
return 0;
}
运行结果
可以看出:以CV_8UC3为例,这个8表示的是每个通道都是8位,这个矩阵的每个元素(像素点)都是3个字节,即24位。