2012-01-17 16 views
4

私は自分のC++ opencvコードでconvertTo()呼び出しをたくさんしています。多少混乱し、エラーメッセージが表示されるまで画像のビット深度を変換する必要があるかどうかはわかりません。OpenCV - さまざまな機能のビット深度の要件の混乱

たとえば、16Uの画像を表すMatがあります。次に、matchTemplate()を呼び出して、8Uまたは32Fが予想されるアサーションエラーを取得しようとします。テンプレートマッチングはなぜ16Uで動作しないのですか?画像を表示しているときも同様の問題です(画像を表示する場合はビット深度の制限がより理にかなっていますが)。私はconvertTo()と倍率などを使ってimshow()で正しく表示されるように画像を取得しようとしています。これをもっとうまくやり遂げたいと思っています(おそらく私はmatlabのimagesc関数に甘んじています)。

openCVがビット深度の使用に期待していることの根本的な欠如はありますか? opencvライブラリ関数のビット深度に対する要求を、よりクリーンな方法でどのように扱うか?あなたがC interface使用していると仮定すると、

答えて

0

cvMatchTemplate(const CvArr* image, const CvArr* templ, CvArr* result,int method)

画像 - 検索が実行されているイメージ。 8ビットまたは32ビット 浮動小数点

なければならないのOpenCVの関数のほとんどは、(色3チャネル画像に対して)8U(グレースケール画像の場合)または32Fのいずれかを使用します。

+0

私は混乱しています - 私は、チャネルの数が浮動小数点/符号なし仕様とは別のものだと考えました。例えば3チャンネルの8ビット画像はCV_8UC3でなければなりません。しかし、私の質問は、テンプレートマッチングを呼び出す関数についてではなく、ビット深度の変換に対処するよりエレガントな方法があるかどうかについて、より広義に言えばです。たとえば、あるビット深度から別のビット深度に自動的に再スケーリングする方法や、フルレンジに正規化する方法がありますか? 16Uやその他のビット深度が多くの機能でサポートされていない理由はありますか? – daj

0

最も一般的な画像タイプは8U(カラーとグレーの両方)です。これはOpenCVの推奨フォーマットです。
その他の形式は、より機能固有の基準でサポートされています。

関連する問題