OpenCV C++を使用しています
1チャンネルの画像を3チャンネルの画像に変換する必要があります。だから私はこれを使うことができます:cvCvtColor(result,gray,CV_BGR2GRAY);
結果のimgは単一チャネルの画像であるため、これはできません。何か案は?
CV_GRAY2BGR
の代わりにCV_BGR2GRAY
を使用する必要があります。
これを試して:
CvSize dim = cvSize(int width, int height);
IplImage* dst = cvCreateImage( dim, 8, 3 );
IplImage* gray = cvCreateImage(dim, 8, 1);
// Load the gray scale image
cvMerge(gray , NULL, NULL, NULL, dst);
cvShowImage("gray",gray);
cvShowImage("dst",dst);
cvWaitKey(0);
Dstとgrayは、データ型が同じである必要があります。フロートをuint行列に単純にマージすることはできません。そのためにはcvScaleを使用する必要があります。
OpenCVリファレンスブックでcvtColorを確認したところ、次のことがわかりました。
C++:void cvtColor(InputArray src、OutputArray dst、int code、int dstCn == 0)
dstCn –宛先イメージのチャネル数。パラメータが0の場合、チャネル数はsrcとcodeから自動的に導出されます。
利用した
cvtColor(src,gray,CV_BGR2GRAY,1);
3チャンネルのマットを1チャンネルに変換すると、うまくいきました。したがって、dstCnを3に変更するとうまくいくかもしれません:)
灰色、灰色、灰色をBGRにマージしてみてください。
IMHO:入力が灰色の場合、出力は灰色になります。取得できる最善の方法は、実際のカラー画像ではなく、(110, 110, 110)
のピクセルデータに対して110
と言うピクセルデータに基づくカラー分散画像です。