我目前正在研究一個程序,該程序應該拍攝LDR圖像並在圖像中乘以某個像素,以便它們的像素值將超過正常0-255(0 -1)像素值邊界。我編寫的程序可以這樣做,但我無法寫入圖像文件,因爲OpenCV中的imwrite()會將值返回到0-255(0-1) 的範圍內,如果它們大於255 。在openCv中寫入像素值大於1的浮動圖像
是否有任何人那裏誰知道如何與像素值大於255(1)
我的代碼看起來像這樣
Mat ApplySunValue(Mat InputImg)
{
Mat Image1 = imread("/****/.jpg",CV_LOAD_IMAGE_COLOR);
Mat outPutImage;
Image1.convertTo(Image1, CV_32FC3);
for(int x = 0; x < InputImg.cols; x++){
for(int y = 0; y < InputImg.rows; y++){
float blue = Image1.at<Vec3f>(y,x)[0] /255.0f;
float green = Image1.at<Vec3f>(y,x)[1] /255.0f;
float red = Image1.at<Vec3f>(y,x)[2] /255.0f ;
Image1.at<Vec3f>(y,x)[0] = blue;
Image1.at<Vec3f>(y,x)[1] = green;
Image1.at<Vec3f>(y,x)[2] = red;
int pixelValue = InputImg.at<uchar>(y,x);
if(pixelValue > 254){
Image1.at<Vec3f>(y,x)[0] = blue * SunMultiplyer;
Image1.at<Vec3f>(y,x)[1] = green * SunMultiplyer;
Image1.at<Vec3f>(y,x)[2] = red * SunMultiplyer;
}
}
}
imwrite("/****/Nice.TIFF", Image1 * 255);
namedWindow("Hej",CV_WINDOW_AUTOSIZE);
imshow("hej", Image1);
return InputImg;
}
你有沒有考慮過使用OpenEXR? http://www.openexr.com http://stackoverflow.com/questions/2119099/using-exr-images-in-opencv –
感謝您的回覆。是的,我已經考慮使用openexr,但我不斷收到此錯誤消息:ibC++ abi.dylib:終止與Iex :: EnosysExc類型的未捕獲異常:無法初始化信號量(函數未實現)。當試圖寫一個exr格式。 –
您想保存文件以進行可視化還是僅用於存儲目的? – AldurDisciple