2

Canon EOS1200Dを使っています。このカメラは、解像度 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 にも 4 つのオブジェクトが表示されます。

[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/ これらの 4 つのオブジェクトは何をしますか?

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 解像度を指定するにはどうすればよいでしょうか?

4

1 に答える 1

1

LibRAW のドキュメントを参照してください。

    1. LibRAW は、生ファイルに保存されているすべての情報を使用します。インカメラおよび多くの商用コンバーターは、さまざまな理由でトリミングを適用します。(こちらの議論を参照してください http://www.libraw.org/node/2117 )。
    1. RAW ファイルには、多くの場合、複数の画像が含まれています。RAW データ自体とは別に、通常は 1 つまたは複数の小さなプレビュー画像 (サムネイル) があります。
    1. unpackメソッドは、デモザイクなしで生のファイル形式からデータをアンパックするだけです。それはまだ同じ生データです。RGB データを取得するには、ドキュメントの「後処理」セクションを参照してください。dcraw_process
于 2016-01-26T17:21:24.117 に答える