似乎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);
}
更新了图片以显示我在说什么: 图像正在以某种方式标准化。如果原始图像包含大面积的光照,则整个图像变得更暗。我希望能够只读取原始图像数据并在opencv中以我自己的方式规范化或处理它。
基于评论,我调整了亮度,但现在问题是像素颜色值,这里最好看到:
左边的图像是libraw的结果,右边的图像是viewnx。 在libraw图像中似乎有一些噪音颜色。
答案 0 :(得分:4)
原始数据存储在LibRaw :: rawdata.raw_image []数组中。这些值尽可能为RAW'没有黑色减法和/在de-bayer(去马赛克)上应用。
要访问此数据,您需要调用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