工具:opencv4,vs2019
opencv的Mat类中有许多不同的数据类型,而且有些定义的又臭又长,对新手而言学习使用及其不方便,下面简单介绍一些数据类型并介绍相关的数据转换方法。
部分内容摘自:https://www.jianshu.com/p/204f292937bb.
一、Mat类中灰度图像数据类型定义
此外上述的基本数据类型都没有加上通道数,如RGB彩色图像对应的数据类型是CV_8UC3,C3代表通道数(利用image.channels()可求通道数,image为图片变量)为3。相应的有CV_8UC1、CV_8UC2、其他的数据类型也一致
二、灰度图像数据类型转化
可以利用converTo函数对图像矩阵中的元素类型进行转化(未改变通道数)。
//本程序用于测试所学内容,积累是一辈子的事情~~~
#include<iostream>
#include<opencv.hpp>
#include<vector>
using namespace std;
using namespace cv;
int main()
{
Mat image = cv::imread("201908001458_.Jpeg", IMREAD_GRAYSCALE); //读取图片,转化为CV_8U类型的灰度图像
//cout << image << endl;
int nRows = image.rows;
int nCols = image.cols;
Mat image1;
image.convertTo(image1, CV_32F);
//cout << image1 << endl;
Mat image2;
image1.convertTo(image2, CV_8U);
imshow("image", image);
imshow("image1", image1);
imshow("image2", image2);
waitKey(0);
return 0;
}
结果如下:
可见从CV_8U转化为CV_32F类型后数据值不变,但是显示时却变成白色图片了,从CV_32F变为CV_8U后又显示正常了。