web-dev-qa-db-ja.com

シングルチャンネル画像を3チャンネル画像に変換C ++ / OpenCV

OpenCV C++を使用しています

1チャンネルの画像を3チャンネルの画像に変換する必要があります。だから私はこれを使うことができます:cvCvtColor(result,gray,CV_BGR2GRAY);

結果のimgは単一チャネルの画像であるため、これはできません。何か案は?

11
Harry

CV_GRAY2BGRの代わりにCV_BGR2GRAYを使用する必要があります。

15
Vadim Shender

これを試して:

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を使用する必要があります。

7
user349026

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に変更するとうまくいくかもしれません:)

7
thundertrick

灰色、灰色、灰色をBGRにマージしてみてください。

3
Utkarsh Sinha

IMHO:入力が灰色の場合、出力は灰色になります。取得できる最善の方法は、実際のカラー画像ではなく、(110, 110, 110)のピクセルデータに対して110と言うピクセルデータに基づくカラー分散画像です。

0
Damilola