成功したものもあれば挫折したものもあります。
成功したもの
- 前回懸念していた通り、OpenCVはデフォルトでは画像を24Bitで読み込むようです。これを48Bitで読み込み、24Bitに減色してプレビューするようにしました。これによって画像処理そのものは48Bitで行なえるため、劣化が最小限に抑えられます。
- プレビューのスケールが等倍だったのを可変にしました。これもQtにやらせるとかなり重いのですがOpenCVでやったら楽勝でした。
挫折したもの
- dcrawからの読み込みに時間がかかるためファイルを経由せずに標準出力から受けとるようにしてみましたが速度は変わりませんでした。ファイル経由の方がいろいろと楽なので元に戻しました。
- 描画をOpenGLにしようとしましたが、まだいまいちQOpenGLを理解していないので一旦やめました。そのうち再チャレンジします。
- 当初OpenCVのWindows用バイナリ(VS2010用)を使用していて、しばらくはこれで問題なかったのですが、いろんな関数を使っていく過程でリンクエラーが発生するようになりました。コンパイラはMinGWなので、MinGWでOpenCVをコンパイルしなおしたのですがそれでもうまくいかず…。というわけで一旦Linux上での作業に変更しました。
アプリ側でやる場合、ざっとリファレンスを見た感じではOpenCVにはあまり低レベルな画像処理は期待できないようなので、ちまちまやるしかないようです。
RAWからの生データを48Bitで持ってこれたので、画質的にはどちらでやっても違いはないでしょう。しかし画像処理のロジックを一から書くのは面倒…。dcrawの内部でやってる処理をコピペしてこちらに導入するか。
ネット上の画像処理のサンプルコードはだいたい24Bitを前提にしてあるので、流用するにしても多少改良が必要なんだろうなぁ。