2012-04-22 27 views
4

この情報の入手先は不明です。グレースケールに変換されたcv :: Matのデータタイプを調べる方法

私は.JPGにロードされ、私はその後、input_image_grayscale->at<float>(row, col)でピクセルを参照するが、アサーションエラーを取得しようcv::cvtColor(*input_image_grayscale, *input_image_grayscale, CV_BGR2GRAY);

とグレースケールにそれを変換します。これを逆参照するために正しいタイプのデータ(浮動小数点型ではない)をどのようにして決定するのですか?おかげで参考

は、私がinput_image_grayscale->type()を実行し、種類によって返された値がOpenCVのは、プリプロセッサ定義で宣言されていることをちょうど整数である0

答えて

3

を得ました。その例で

8U
switch(matrixType) 
{ 
    case CV_8UC1: 

    .... check for other types 
} 

は、unsigned char型を指し、C1は、単一チャンネルの画像を参照:あなたはこのようなswitch文でそれを確認することができます。 CV_8UC1は0と定義されていますので、あなたのマットのタイプであり、参照タイプにunsigned charを使用する必要があります。

Mat :: depthという関数を使用して、単一の行列要素のサイズの型を返すこともできます。これは、それがグレースケールであるため、単一のチャネルイメージであることがわかっているからです。

+0

これは私が思ったものですが、intとunsignedの両方を試みると、同じアサーションエラーが返されます。型と深度の両方が返されます。 – zebra

+1

@zebraアサーションエラーが発生している場合は、データの範囲外にあるものにアクセスしようとしていることが原因であると推測しています。 'Mat :: rows'と' Mat :: cols'を使って 'row'と' col.'で有効なピクセルデータにアクセスしてください。 – kappamaki

+0

これは私の最初の仮定ですが、範囲外ではありません。私はCV_8U型だと思うが、私はすべてのデータ型を試しているし、正しく動作していない。私は、すべて同じアサーションエラーを試しました。テスト目的のために、私はピクセル(0、0)にアクセスしようとしています – zebra

関連する問題