gpt4 book ai didi

c++ - LibRaw 和 OpenCV

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:14:55 25 4
gpt4 key购买 nike

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

我使用 LibRaw 打开这个文件。

LibRaw processor;
processor.open_file("test1.CR2");

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

processor.imgdata.sizes.raw_height = 3516
processor.imgdata.sizes.raw_width = 5344
processor.imgdata.sizes.height = 3465
processor.imgdata.sizes.width = 5202
processor.imgdata.sizes.top_margin = 51
processor.imgdata.sizes.left_margin = 142
processor.imgdata.sizes.iheight = 3465
processor.imgdata.sizes.iwidth = 5202

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

我还看到了四个对象:processor.tiff_ifd 像这样:

[0] {t_width=5184 t_height=3456 bps=8 ...}
[1] {t_width=160 t_height=120 bps=8 ...}
[2] {t_width=668 t_height=432 bps=16 ...}
[3] {t_width=5344 t_height=3516 bps=14 ...}

2/这四个对象是什么?

3/我不明白声明的内容:

processor.unpack();

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

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

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

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

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

谢谢。

编辑

好的,所以我必须使用:

processor.imgdata.params.output_bps = 16;
processor.open_file("test1.CR2");
processor.unpack();
processor.dcraw_process();
libraw_processed_image_t* output = processor.dcraw_make_mem_image();

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

processor.imgdata.params.cropbox

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

最佳答案

请引用 LibRAW 文档。

    1. LibRAW 使用存储在原始文件中的所有信息。出于各种原因,相机内和许多商业转换器应用了一些裁剪。 (参见此处的讨论 http://www.libraw.org/node/2117)。
    1. 原始文件通常包含多张图片:除了原始数据本身,通常还有一张或多张小的预览图片(缩略图)。
    1. unpack 方法只从没有任何去马赛克的原始文件格式中解压数据。它仍然是相同的原始数据。要获取 RGB 数据,请参阅文档中的“后处理”部分,特别是 dcraw_process

关于c++ - LibRaw 和 OpenCV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35019381/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com