0

8ビットを超えるピクセル深度を保持できるopencvのデータ構造が見つからないようです。私の問題は、LDR 画像を取得し、いくつかのピクセルを乗算して、これらのピクセルの値が 255 境界を超えるようにしたいということです。これは私がこれまでに試したことです。ピクセル値を 0 ~ 255 ではなく 0 ~ 1 にマッピングしてから、それらにスカラーを掛けてみました (値を増やすため)。しかし、画像を再度書き込む必要がある場合、255 を掛けないと画像が暗くなります。助けていただければ幸いです :)

Mat ApplySunValue(Mat InputImg){


Mat OutPutImg = Mat::zeros(InputImg.rows, InputImg.cols, CV_32FC1);


for(int x = 0; x < OutPutImg.cols; x++){
    for(int y = 0; y < OutPutImg.rows; y++){

        int PixelValue = InputImg.at<uchar>(y,x)/255.f;

        if(PixelValue < 0.9){
            OutPutImg.at<uchar>(y,x) = 0;
        }else{
            OutPutImg.at<uchar>(y,x) = PixelValue * sunMultiplyer;
        }
    }
}

imwrite("/Users/K******/Desktop/EnviormentMap.jpg", OutPutImg * 255);

namedWindow("Hej", CV_WINDOW_AUTOSIZE);
imshow("Hej", OutPutImg * 255);



return OutPutImg;

}

4

1 に答える 1

0

これは常に 0 (整数除算) になります。

int PixelValue = InputImg.at<uchar>(y,x)/255.f;

PixelValue は整数であるため、比較は BS です。

if(PixelValue < 0.9){

@Micka がすでに見つけたように、at() には正しい型を使用する必要があります。

OutPutImg.at<float>(y,x) = 299.0f; 
// yes, can be larger than 255 now, so you can discard your broken mapping attempts

浮動小数点画像を jpeg または png として保存または読み取ることはできません。opencv ライブラリが exr サポート付きでビルドされているかどうかを確認します。

cerr << cv::getBuildInformation() << endl;

その場合は、*.hdr または *.exr として保存/読み取ることができます

于 2014-03-05T10:15:15.350 に答える