似乎尼康自己的工具和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);
}
用图像更新以显示我在说什么:图像正在以某种方式进行标准化。如果原始图像包含大面积的浅色材料,则整个图像会变得更暗。我希望能够仅读取原始图像数据并在 opencv 中以我自己的方式对其进行规范化或处理。
更新
根据评论,我调整了亮度,但现在像素颜色值出现问题,最好在这里看到:
左边的图像是 libraw 的结果,右边的图像是 viewnx。libraw 图像中似乎有一些噪点颜色。