我使用佳能 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 分辨率?