0

我有以下代码使用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;
4

1 回答 1

1

当您将CV_16S图像传递给imshow(或其 C 等效项)时,像素值会在可视化之前通过公式 v显示= 128 + v图像/256隐式重新计算

因此,您可能需要将图像乘以某个常数(256?)或在调用CV_8U之前将其转换为imshow

于 2012-06-21T00:26:02.297 回答