我有以下代码使用 OpenCV API 中的 cv :: Mat.convertTo()函数转换矩阵的“类型”。
但是当我使用 imshow()显示它时,图像完全不同。
转换后的图像完全是灰色的。
但是,这些图像中的值( cv :: Mat )是相同的。
我想我在这里遗漏了一些非常微不足道的东西。
Mat x = imread("/home/jason/Desktop/1.png",0);
Mat y = Mat(x.rows,x.cols,CV_16S,Scalar(0));
x.convertTo(y,CV_16SC1, 1,0);
imshow("x",x);
imshow("y",y);
waitKey(0);
cout<<x.type()<<endl;
cout<<y.type()<<endl;
//verifying the values in the image.
cout<<"rows 10"<<x.row(10)<<endl;
cout<<"rows 10"<<y.row(10)<<endl;
答案 0 :(得分:1)
当您将CV_16S
图像传递给imshow
(或其等效的C)时,在显示公式v 之前隐式重新计算像素值 = 128 + v <子>图像子> / 256
所以你可能需要将图像乘以某个常数(256?)或在CV_8U
调用之前将其转换为imshow
。