问题标签 [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.
c++ - 与尼康自己的转换器相比,Libraw 让我的图像太亮了
似乎尼康自己的工具和photoshop可以选择在拍摄时打开图像。
但是使用 libraws dcraw 处理器我无法弄清楚这一点。
这是我的实现。
用图像更新以显示我在说什么:图像正在以某种方式进行标准化。如果原始图像包含大面积的浅色材料,则整个图像会变得更暗。我希望能够仅读取原始图像数据并在 opencv 中以我自己的方式对其进行规范化或处理。
更新
根据评论,我调整了亮度,但现在像素颜色值出现问题,最好在这里看到:
左边的图像是 libraw 的结果,右边的图像是 viewnx。libraw 图像中似乎有一些噪点颜色。
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 84
(0x384
地址)
转到此地址并在 MakerNote 部分中搜索FNumber 0x3
转到偏移量0x5C8
以找到我们的值(计数 4 x 类型 3 ushort,16 位)
而且...失败了,实际上我的佳能没有填写此部分。
阅读http://www.exiv2.org/tags.html FNumber 可以在 EXIF 小节中找到。
做同样的过程找到EXIF小节和标签“ 0x829d Exif.Image.FNumber
type 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
像预期的那样。
c++ - 为什么 cv::Mat::data 总是指向 uchar?
我尝试使用 LibRaw 读取 NEF 文件,然后将其放入 cv::Mat 中。NEF 文件以 12 位存储数据,这意味着我需要 16 位,所以我应该像这样使用 CV_16UC4:
Libraw 将数据存储为 ushort*[4],所以我认为这应该可行:
我还收到一个构建错误,即数据可能会丢失,因为将发生 ushort 到 uchar 的转换,这是有道理的,但是,如何将大于 uchar 的数据放入数据中?
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 分辨率?
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
谢谢
image - 使用 LibRaw 正确解码 CR2 图像?
我的最终目标是解码来自多个摄像头的 CR2 图像,以便在桌面 gui 中显示。
使用 LibRaw 图像解码库,我使用示例项目尝试将 CR2 图像解码为 .TIFF 文件。
作为jpg缩略图的原始文件如下:
解码后保存为.TIFF的原始CR2如下:
如您所见,结果略亮且偏黄。
示例项目包含以下用于解码图像的参数:
我尝试了各种选项来复制缩略图中的图像,例如白平衡 (-w)、插值质量 (-q N) 和嵌入颜色矩阵 (+M)。当我使用白平衡时,它去除了淡黄色调,但产生了明亮的图像。然后我继续禁用自动增亮(-W),它产生了一个非黄色的图像,但比缩略图暗得多。
哪些图像解码参数将帮助我将 CR2 解码为看起来像缩略图的高质量图像(在颜色、亮度等方面)?
c++ - 使用 OpenCV 对 Canon CR2 图像进行 DeBayering
我要做的是读取我的佳能 Rebel T5 1200D 上拍摄的 .cr2 RAW 文件。我可以使用 LibRaw 和 OpenCV 加载和显示图像,但是与我在 Windows 中打开文件时相比,图像看起来有点太亮并且更黄。图片本身在帖子的底部。有人问了几个类似的问题:
使用 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。
然而,这是我的眼睛看到的(抱歉缩放,颜色才是最重要的):
我觉得我离这里很近,但我得到的图像有点太亮而且颜色有点偏。我的相机上的设置是使用 sRGB 格式导出 RAW 图像,所以我确信对图像强度应用某种伽玛校正会有所帮助,但我似乎无法得到正确的图像。
我尝试了不同的拜耳矩阵(即 RG)、不同的位深度转换、在进行位深度转换时重新排列(在 DeBayering 之前和之后),但似乎都没有使图像正确显示。
有人认识这种变色吗?如果是这样,他们可以帮助我找到我的代码中的错误吗?
感谢您的阅读,
约翰
PS 我知道这里有很多文字,我不确定这种帖子的最佳格式是什么。我只是想提供我正在使用的所有信息。
编辑:正如 Mark Ransom 下面建议的那样,我认为这是由于白平衡不正确造成的。我被指出了数码相机颜色管道的方向,解码图像不仅仅是 debayer 步骤。
来自维基百科文章:
典型组件包括图像传感器校正(包括“去拜耳”或应用拜耳滤镜)、降噪、图像缩放、伽马校正、图像增强、色彩空间转换(在 RGB、YUV 或 YCbCr 等格式之间)、色度二次采样、帧率转换、图像压缩/视频压缩(如JPEG),计算机数据存储/数据传输。
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 ) 图像以进行后处理和去马赛克?
c++ - Libraw - 如何使用 Libraw 获得仅带有红色像素的图像?
我正在将 Libraw 用于一个关于处理原始图像文件的项目。我需要从原始文件中实现一个功能,我需要只用红色像素(以及其他 3 个蓝色、绿色和绿色 2 像素的图像)导出图像。我已经尝试过 4channels 样本,但这只是给了我一张黑色和灰度的图片。在导出图像之前,我尝试使用此修改代码:
这只是给我一个灰度图像,像素中的黑点不是红色的。当您可以清楚地看到红色时,我想要一张图像。
谁能帮我解决这个问题?
此致
c - 如何使用 LibRaw(c++) 获取 CR2 图像的原始数据
LibRaw 是一个用于从数码相机读取 RAW 文件的库(CRW/CR2、NEF、RAF、DNG、MOS、KDC、DCR 等;几乎支持所有 RAW 格式)。我想知道如何使用 LibRaw 来获取佳能 CR2 图像的原始数据。
这是RAW数据的数据结构,不知道最原始的数据存放在哪个结构中。