标签: libraw

与尼康自己的转换器相比,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图像中似乎有一些噪音颜色.

c++ opencv libraw

5
推荐指数
1
解决办法
1703
查看次数

为什么cv :: Mat :: data总是指向uchar?

我尝试使用LibRaw读取NEF文件,然后将其放在cv :: Mat中。NEF文件将数据存储为12位,这意味着我需要16位,因此我应该像这样使用CV_16UC4:

Mat img1(height, width, CV_16UC4);
Run Code Online (Sandbox Code Playgroud)

Libraw将数据存储为ushort * [4],所以我认为这应该可行:

for (i = 0; i < iwidth*height; i++) {       
    img1.data[4*i+1] = Processor.imgdata.image[i][0];
    img1.data[4*i+2] = Processor.imgdata.image[i][1];
    img1.data[4*i+3] = Processor.imgdata.image[i][2];
    img1.data[4*i+4] = Processor.imgdata.image[i][3];
}
Run Code Online (Sandbox Code Playgroud)

我还会收到一个构建错误,因为将发生ushort到uchar转换,因此数据可能会丢失,这是有道理的,但是,如何将比uchar大的数据放入数据中?

c++ opencv libraw

5
推荐指数
1
解决办法
969
查看次数

Python rawkit 如何从 RAW 文件中读取元数据值?

我正在编写 python 脚本,我需要从原始照片文件(例如 .CR2)中获取 exif 信息。

我发现 Python Rawkit提供了这样做的能力。

with Raw(filename=image_path) as raw:
  print raw.metadata

Metadata(aperture=-1.2095638073643314e+38, timestamp=4273602232L,
         shutter=-1.1962713245823862e+38, flash=True, 
         focal_length=-1.2228562901462766e+38, height=3753, 
         iso=-1.182978841800441e+38,
         make='Canon', model='EOS 5D Mark II', 
         orientation=0, width=5634)
Run Code Online (Sandbox Code Playgroud)

但我有点困惑,如何读取这些值?。例如,我期待像100/200/400这样的iso值,但什么是-1.182978841800441e+38

我的问题不是针对iso的,也针对快门、光圈……

我检查了libraw和 rawkit doc,但无法找到如何读取/转换这种值。

文档中的这部分不是很详细:

float iso_speed;
ISO sensitivity.

float shutter;
Shutter speed.
Run Code Online (Sandbox Code Playgroud)

有人可以帮助我理解如何阅读这些值吗?

谢谢

[更新]

正如neo所建议的,我将使用ExifRead。事实上,这是一个更好的选择,我正在编写一个 python 脚本。使用 ExifRead 不需要额外的 C 库依赖项。

我能够打开佳能原始文件并解析 Exif,但不幸的是遇到了错误的光圈值:

EXIF ApertureValue (Ratio): 3
# My photo was taken in 2.8 (maybe a rounded value on …
Run Code Online (Sandbox Code Playgroud)

python metadata photo libraw

4
推荐指数
1
解决办法
6456
查看次数

Rawpy 原始图像模式

我正在尝试使用 RawPy 模块在 Python 中读取原始图像并对其进行去马赛克。不幸的是,该模块不提供简单的去马赛克方法,而是提供完整的后处理函数,该函数不适合我的情况,因为我想保留浮点图像,而不是使用 8 位 uint。我也不想应用伽马或任何其他后处理,所以我最终手动对它们进行去马赛克。当我使用已加载 dng 图像的 RawPy 对象的raw_pattern方法时,我得到以下结果:

In[23] : raw_image.raw_pattern
Out[23]: array([[0, 1],
                [3, 2]], dtype=uint8)
Run Code Online (Sandbox Code Playgroud)

但 Adob​​e 的 DNG 文档说

Digital Negative Specification
September 2012
CFAPlaneColor
...
Value  
See below
Default 
0, 1, 2 (red, green, blue)
Run Code Online (Sandbox Code Playgroud)

我很困惑这3从哪里来?如果有另一种方法对原始图像进行去马赛克也很合适,因为我很容易替换项目的这一部分。

谢谢提前!

python image-processing libraw

3
推荐指数
1
解决办法
3713
查看次数

标签 统计

libraw ×4

c++ ×2

opencv ×2

python ×2

image-processing ×1

metadata ×1

photo ×1