问题标签 [libraw]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
2163 浏览

c++ - 与尼康自己的转换器相比,Libraw 让我的图像太亮了

似乎尼康自己的工具和photoshop可以选择在拍摄时打开图像。

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

这是我的实现。

用图像更新以显示我在说什么:图像正在以某种方式进行标准化。如果原始图像包含大面积的浅色材料,则整个图像会变得更暗。我希望能够仅读取原始图像数据并在 opencv 中以我自己的方式对其进行规范化或处理。

在此处输入图像描述

更新

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

在此处输入图像描述

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

0 投票
2 回答
7258 浏览

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

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

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

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

我的问题不是针对iso的,它也针对快门,光圈,...

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

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

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

谢谢

[更新]

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

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

快速回答:使用 Fnumber 标志

长答案(我是如何发现/调试的):

阅读这个出色的链接了解存储在佳能 RAW.CR2文件中的内容、方式和原因 ( http://lclevy.free.fr/cr2/ ) 我决定自己解码并知道发生了什么。

此链接发送给我以解码原始文件cr2_poster.pdf 从中我认为最佳值似乎在我的佳能特定 MakerNote 部分中的 FNumber 值。(所有值描述都在这里canon_tags

我用 Hexa 编辑器(hexedit)打开了我的文件,然后……我完全迷失了。

关键事项:

  • 偏移量是文件中包含您的值的地址。
  • 读取:C8 05在文件中应该被读取05C8。偏移量示例,地址为0x5C8

有了这个发现 MakeNote 部分很容易。

快速的方法是直接搜索包含 MakerNote 部分地址的0x927c MarkerNote(所以在文件中)标志。7C 92如果您找不到,请浏览该IFD部分以找到EXIF subsection. 然后在该小节中,您将找到 MakerNote 部分

偏移量:84 03 00 00-> 00 00 03 840x384地址)

转到此地址并在 MakerNote 部分中搜索FNumber 0x3

转到偏移量0x5C8以找到我们的值(计数 4 x 类型 3 ushort,16 位)

而且...失败了,实际上我的佳能没有填写此部分。

阅读http://www.exiv2.org/tags.html FNumber 可以在 EXIF 小节中找到。

做同样的过程找到EXIF小节和标签“ 0x829d Exif.Image.FNumbertype 5 Rational” Rational type由64位组成(分子和分母ulongs)Rational_data_type

然后读取0x334偏移量

正如我们在 Hexa 中所读到的:0x1C/0XA 十进制,做数学:28/10= 14/5=2.8

验证我在 ExifRead 中有这个值

瞧!

我在寻找2.8浮点数,这个值以分数格式存储。所以图书馆不做数学,只是简化分数。

这就是为什么我们有14/5而不是2.8像预期的那样。

0 投票
3 回答
1894 浏览

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

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

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

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

0 投票
1 回答
1269 浏览

c++ - LibRaw 和 OpenCV

我使用佳能 EOS 1200D。本相机创建分辨率为 5184 x 3456 的 JPEG 文件。相机还创建 CR2 文件。

我使用 LibRaw 打开这个文件。

如果我调试我的程序,我可以看到:

1/ 为什么没有出现5184 x 3456的分辨率?

我还在:processor.tiff_ifd 中看到了四个对象,如下所示:

2/ 这四个对象是什么?

3/ 我不明白声明是什么:

做。它是否从 RGBG 格式转换为 RGB 格式?

现在,我想创建一个分辨率为 5184 x 3456 且不损失准确性的 cv::Mat。

4/ 那么我如何将我的 CR2 文件转换为格式为 CV_16UC3 的 cv::Mat?

从几个 CR2 文件中,我想创建一个新图像,这是平均值。

5 / 那么,当我有一个格式为 CV_16UC3 的 cv::Mat 时,我如何将它保存在一个文件中而不会丢失准确性?

谢谢你。

编辑

好的,所以我必须使用:

但是我如何指定使用 JPEG 分辨率呢?我认为它与:

但是如何在没有硬编码的情况下指定 JPEG 分辨率?

0 投票
0 回答
240 浏览

javascript - Node-gyp 尝试将 libraw 编译为依赖项

我正在尝试将 libraw 编译为我的 node.js 项目的依赖项。

我有两个不同的 .gyp 文件:./binding.gyp./vendor/raw.gyp

我已经下载了当前版本的 libraw 和去马赛克包,它们都可以在以下./vendor/文件夹中找到:

这是我的两个 gyp 文件:

./binding.gyp

./vendor/raw.gyp

问题是,当我尝试编译库时,node-gyp configure build最终出现以下错误:

这是完整的输出:

以及项目的网址:https ://github.com/m0g/node-libraw/tree/batteries

谢谢

0 投票
1 回答
1111 浏览

image - 使用 LibRaw 正确解码 CR2 图像?

我的最终目标是解码来自多个摄像头的 CR2 图像,以便在桌面 gui 中显示。

使用 LibRaw 图像解码库,我使用示例项目尝试将 CR2 图像解码为 .TIFF 文件。

作为jpg缩略图的原始文件如下:

图 1

解码后保存为.TIFF的原始CR2如下:

图 2

如您所见,结果略亮且偏黄。

示例项目包含以下用于解码图像的参数:

我尝试了各种选项来复制缩略图中的图像,例如白平衡 (-w)、插值质量 (-q N) 和嵌入颜色矩阵 (+M)。当我使用白平衡时,它去除了淡黄色调,但产生了明亮的图像。然后我继续禁用自动增亮(-W),它产生了一个非黄色的图像,但比缩略图暗得多。

哪些图像解码参数将帮助我将 CR2 解码为看起来像缩略图的高质量图像(在颜色、亮度等方面)?

0 投票
0 回答
2738 浏览

c++ - 使用 OpenCV 对 Canon CR2 图像进行 DeBayering

我要做的是读取我的佳能 Rebel T5 1200D 上拍摄的 .cr2 RAW 文件。我可以使用 LibRaw 和 OpenCV 加载和显示图像,但是与我在 Windows 中打开文件时相比,图像看起来有点太亮并且更黄。图片本身在帖子的底部。有人问了几个类似的问题:

使用 LibRaw 正确解码 CR2 图像?

使用 OpenCV 将 12 位拜耳图像转换为 8 位 RGB

我将首先发布我的所有代码,然后进入问题的细节。

我首先使用 LibRaw 打开并解压缩原始图像文件。这个例子在 LibRaw 的网站 http://www.libraw.org/docs/API-overview-eng.html

表示我将留下一个“图像”,其中每个像素是实际的 4 个 ushort 值 [Red, Green1, Blue, Green2] 代表该像素处的拜耳颜色。当我打印出值时(使用以下代码)

我得到以下结果:

因此,在偶数行上,红色和绿色 1 像素交替具有非零值,而在奇数行上,蓝色和绿色 2 像素交替具有非零值。这些值似乎是 12 位的,尽管我不是 100% 的。

看OpenCV的cvtColor函数的描述

http://docs.opencv.org/2.4/modules/imgproc/doc/miscellaneous_transformations.html#cvtcolor

以及这个人对一些cr2颜色格式的描述:

http://lclevy.free.fr/cr2/#interpol

向我表明我有一个“BG”品种的拜耳图像(按照 OpenCV 文档中使用的术语。)

因此,为了将该图像传递给 cvtColor,我必须从解压缩的原始图像中获取每个像素值,并创建一个无符号短裤的连续图像。// 获取像素 idx int idx = y * width + x;

一旦我得到了一个连续的短裤缓冲区(vBayerData),我就构建了一个opencv mat并使用CV_BayerBG2RGB对其进行debayer。

然而,看看我打印出来的像素值告诉我​​这些值可能是 12 位的(虽然我不完全确定。)所以我必须从 12 位范围到 16 位范围,我相信相当于将这些值乘以 16。

毕竟,这是我留下的图像: OpenCV 输出

然而,这是我的眼睛看到的(抱歉缩放,颜色才是最重要的):

我在 Windows 中看到的

我觉得我离这里很近,但我得到的图像有点太亮而且颜色有点偏。我的相机上的设置是使用 sRGB 格式导出 RAW 图像,所以我确信对图像强度应用某种伽玛校正会有所帮助,但我似乎无法得到正确的图像。

我尝试了不同的拜耳矩阵(即 RG)、不同的位深度转换、在进行位深度转换时重新排列(在 DeBayering 之前和之后),但似乎都没有使图像正确显示。

有人认识这种变色吗?如果是这样,他们可以帮助我找到我的代码中的错误吗?

感谢您的阅读,

约翰

PS 我知道这里有很多文字,我不确定这种帖子的最佳格式是什么。我只是想提供我正在使用的所有信息。

编辑:正如 Mark Ransom 下面建议的那样,我认为这是由于白平衡不正确造成的。我被指出了数码相机颜色管道的方向,解码图像不仅仅是 debayer 步骤。

来自维基百科文章:

典型组件包括图像传感器校正(包括“去拜耳”或应用拜耳滤镜)、降噪、图像缩放、伽马校正、图像增强、色彩空间转换(在 RGB、YUV 或 YCbCr 等格式之间)、色度二次采样、帧率转换、图像压缩/视频压缩(如JPEG),计算机数据存储/数据传输。

0 投票
0 回答
1340 浏览

python - 如何用 rawpy 去马赛克 picamera 原始图像?

我正在尝试从 Pi NoIR 相机堆叠长时间曝光。

picamera 原始格式可以根据示例解压缩到一个 numpy 数组中:http: //picamera.readthedocs.io/en/release-1.10/recipes2.html#raw-bayer-data-captures

如何将此 numpy 数组转换为 rawpy ( https://github.com/letmaik/rawpy ) 图像以进行后处理和去马赛克?

0 投票
0 回答
171 浏览

c++ - Libraw - 如何使用 Libraw 获得仅带有红色像素的图像?

我正在将 Libraw 用于一个关于处理原始图像文件的项目。我需要从原始文件中实现一个功能,我需要只用红色像素(以及其他 3 个蓝色、绿色和绿色 2 像素的图像)导出图像。我已经尝试过 4channels 样本,但这只是给了我一张黑色和灰度的图片。在导出图像之前,我尝试使用此修改代码:

这只是给我一个灰度图像,像素中的黑点不是红色的。当您可以清楚地看到红色时,我想要一张图像。

谁能帮我解决这个问题?

此致

0 投票
1 回答
622 浏览

c - 如何使用 LibRaw(c++) 获取 CR2 图像的原始数据

LibRaw 是一个用于从数码相机读取 RAW 文件的库(CRW/CR2、NEF、RAF、DNG、MOS、KDC、DCR 等;几乎支持所有 RAW 格式)。我想知道如何使用 LibRaw 来获取佳能 CR2 图像的原始数据。

这是RAW数据的数据结构,不知道最原始的数据存放在哪个结构中。