与尼康自己的转换器相比,Libraw使我的图像太亮了

Pou*_*sen 5 c++ opencv libraw

似乎nikons拥有自己的工具,而photoshop可以选择在拍摄时打开图像.

但是使用libraws dcraw处理器我无法弄清楚这一点.

这是我的实施.

CV_EXPORTS_W int load_image(const char * path, cv::Mat & output)
{


    LibRaw RawProcessor;

    int ret;

#define imgD RawProcessor.imgdata

    imgD.params.use_camera_wb = 1;
    imgD.params.use_auto_wb = 0;

    if ((ret = RawProcessor.open_file(path)) != LIBRAW_SUCCESS)
    {
        fprintf(stderr, path, libraw_strerror(ret));
        return -1;
    }
    if ((ret = RawProcessor.unpack()) != LIBRAW_SUCCESS)
    {

        return -1;
    }

    int check = RawProcessor.dcraw_process();
    libraw_processed_image_t *image_ptr = RawProcessor.dcraw_make_mem_image(&check);

    output = cv::Mat(cv::Size(image_ptr->width, image_ptr->height), CV_8UC3, image_ptr->data, cv::Mat::AUTO_STEP);
    cv::cvtColor(output, output, 4);
}
Run Code Online (Sandbox Code Playgroud)

更新了图像以显示我在说什么:图像正在以某种方式进行标准化.如果原始图像包含大面积的光照,则整个图像变得更暗.我希望能够只读取原始图像数据并在opencv中以我自己的方式规范化或处理它.

在此输入图像描述

更新

基于评论,我调整了亮度,但现在问题是像素颜色值,这里最好看到:

在此输入图像描述

左边的图像是libraw的结果,右边的图像是viewnx.libraw图像中似乎有一些噪音颜色.

小智 5

原始数据存储在 LibRaw::rawdata.raw_image[] 数组中。这些值是“尽可能原始的”,没有应用黑色减法和/或去拜耳(去马赛克)。

要访问这些数据,您需要调用 LibRaw::open_file() 和 LibRaw::unpack。

此外,您可以从 LibRaw::dcraw_process() 的数据处理中排除一些步骤:

 imgdata.params.no_interpolation=1 disables demosaic
 imgdata.params.no_auto_scale=1 disables scaling from camera maximum to 64k
 imgdata.params.no_auto_bright=1 disables auto brighten
Run Code Online (Sandbox Code Playgroud)