在OpenCV中转换Matrix的类型

时间:2012-06-21 00:15:17

标签: c++ image-processing opencv

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

1 个答案:

答案 0 :(得分:1)

当您将CV_16S图像传递给imshow(或其等效的C)时,在显示公式v 之前隐式重新计算像素值 = 128 + v <子>图像 / 256

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