(1)Mat类型容器的数据类型
调用Mat::type函数可以查看Mat容器对象数据的属性,其返回值对应不同数据类型和通道数,如下表所示。
举例说明:
- Mat image(300, 300, CV_8UC1);
- cout << image.type() << endl;
上面两行函数建立了一个CV_8UC1的Mat类对象image,则调用其type函数得到的返回值为0。
对应上表可以看到:数据格式为CV_8U,单通道(C1 means One Channel)。
同理,假设读入一幅图像,也可以查看他的数据属性,如下例:
- Mat image;
- image = imread("1.png");
- cout << image.type() << endl;
假设返回值为16,通过上表,则可以知道被读入的图像是CV_8UC3的属性。
(2)对数据类型的修改
利用Mat::convertTo(OutputArray m, int rtype, double alpha=1, double beta=0)函数实现不同数据类型之间的转换。其中:
m:【输出量】就是盛放转换后数据的容器;
rtype:【输入量】目标数据类型;
alpha:【输入量】放缩尺度;
beta:【输入量】偏置量;
如下代码:
cv::Mat Src(100, 100, CV_8UC1, cv::Scalar(125));
cv::Mat Dst;
double alpha = 0.8, beta = 1.5;
Src.convertTo(Dst, CV_32FC1, alpha, beta);
表示我们新建了一个100*100的单通道矩阵Src,数据类型是uchar,所有位置填充125;
我们将Src转换为数据类型为float的矩阵,同时对矩阵内每一个元素执行如下操作:
最终转换完成后的数据,放在Dst矩阵中。