opencv Mat 16位unsigned数据显示为黑色

项目场景:

场景:用opencv imshow出栅格数据 并按照高程值进行线性拉伸。


问题描述:

问题:Mat存储的矩阵数据格式为CV_16U,imshow出的结果一直为黑色。


原因分析:

1.对于16位数据,调用imshow时,采用0-1区间,而不是0-255区间。
2.本原数据在0-255之间,并未单波段数据。


解决方案:

方法:转为8位数据(0-255之间),原数据不在0-255间的,要拉伸一下:

Mat ff = Mat::zeros(dem_opencv.rows, dem_opencv.cols, CV_8UC1); //单波段8位
	for (int k = 0; k < dem_opencv.rows; k++) {
		for (int kk = 0; kk < dem_opencv.cols; kk++) {
			int n = dem_opencv.at<ushort>(k, kk);   //赋值
			ff.at<uchar>(k, kk) = n;
		}
	}

参考:

1.代码用的这中间的一段:https://blog.csdn.net/l297969586/article/details/79154150
2.opencv基本数据格式:https://blog.csdn.net/zhanpl/article/details/70255270

你可能感兴趣的:(opencv,gdal)