OpenCVがimread関数で階調図を読み込んでカラー図(3チャネル)になったのはどういうことですか?

787 ワード

OpenCVのC++プログラミングを使用していると、次のような状況に遭遇しました.
img = imread("F:\\My_Desktop\\data\\gesture_frame\\test\\1\\1\\0.jpg");

文はパスの下の0を読み込む.jpgこの階調画像の場合、imgを使う.channel()出力ピクチャのチャネル数は,驚くべきことに出力の結果が1ではなく3であることが分かった.imread関数の元の定義を表示します.
CV_EXPORTS_W Mat imread( const String& filename, int flags = IMREAD_COLOR );

このとき、imread()関数を使用して2番目のパラメータを与えなかった場合、2番目のパラメータのデフォルト値はIMREAD_であることが分かった.COLOR、つまりデフォルトで読み込まれた画像はカラー画像です.
上に読み込んだimgピクチャの各チャネルの値を出力と、各画素の3つのチャネルの値が等しい、すなわち、0.jpgは1枚の階調画像であるが、デフォルトではカラーで読み込まれるため、3つのチャネルの値はいずれもその画素に対応する階調値をとる.
だから~~階調図を正しく読み込む方法は:
img = imread("F:\\My_Desktop\\data\\gesture_frame\\test\\1\\1\\0.jpg",0);

たとえ0.jpgはもともと1枚の階調図で、やはり2番目のパラメータを0に等しくしなければなりません!!!