0

OpenCVAPIの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画像を(またはそれに相当するC)に渡す場合imshow、ピクセル値は、表示される式v = 128 + v image /256によって視覚化する前に暗黙的に再計算されます。

CV_8Uしたがって、呼び出しの前に、画像に定数(256?)を掛けるか、変換する必要がありimshowます。

于 2012-06-21T00:26:02.297 に答える