CV_8U和CV_32F与CV_8UC3和CV_32FC3区别

标题 opencv 中常用数据类型的区别以及数据类型的转换

8代表8bit 每一个像素点在内存空间占用8bit
S–代表—signed int—有符号整形
U–代表–unsigned int–无符号整形
F–代表–float---------单精度浮点型
同时注意 CV_8U 代表的是单通道图像,数据范围是{0-255} CV_32F代表的图像是单通道图像,数据范围是{0.0 - 1.0}

imshow在显示图像时均会映射到{0-255}之间 CV_8U显示的就是0-255但要注意,在显示CV_32F类型数据时,要乘以255计算的到的数据 CV_16U的数据要除以256

	Mat img = Mat::zeros(Size(512, 512), CV_8U);  //创建一个8位单通道图像
	img = Scalar(127);  //灰黑色
	imshow("img", img);

CV_8U和CV_32F与CV_8UC3和CV_32FC3区别_第1张图片


	Mat dst1 = Mat::zeros(Size(250, 250), CV_32F);  //创建一个单通道32位图像
	dst1 = Scalar(0.5);// 灰黑色图像
	
	//imshow("dst", dst);
	imshow("dst1", dst1); 

CV_8U和CV_32F与CV_8UC3和CV_32FC3区别_第2张图片
要注意在图像类型转换过程中,图像要进行归一化处理否则 图像就会产生出乎意料的意外。(下面的例子如果不进行归一化就会产生白色图像,因为相当于Scalar(1.0))

Mat dst = Mat::zeros(Size(250, 250), CV_8U);  //创建一个8位单通道图像
	dst = Scalar(127);  //灰黑色
	imshow("转换前", dst);
	dst.convertTo(dst, CV_32F);  //16代表CV_8UC3  21代表CV_32FC3  归一化计算
	normalize(dst, dst, 1.0, 0, NORM_MINMAX);  //将图片归一化到0 -1 之间

	imshow("转换后", dst);   

CV_8U和CV_32F与CV_8UC3和CV_32FC3区别_第3张图片
CV_8U和CV_32F与CV_8UC3和CV_32FC3区别_第4张图片

你可能感兴趣的:(计算机视觉,opencv,图像处理,人工智能,c++)