15

OpenCV で CV_8UC1 Mat を CV_8UC3 に変換するには?

Mat dst;
Mat src(height, width, CV_8UC1, (unsigned char*) captureClient->data());
src.convertTo(dst, CV_8UC3);

しかし dst.channels() = 1

4

3 に答える 3

32

これを行うための最良の方法は次のとおりです。

cvtColor(src, dst, COLOR_GRAY2RGB);

画像はグレースケールCV_8UC1のときと同じように見えますが、タイプCV_8UC3の3チャンネル画像になります。

于 2013-01-30T18:17:41.993 に答える
3

convertToのドキュメントから

void Mat::convertTo(Mat& m, int rtype, double alpha=1, double beta=0) const

rtype – 目的の宛先マトリックス タイプ、または深さ(チャネル数がソース チャネルと同じであるため)。rtype が負の場合、宛先行列はソースと同じ型になります。

作成する 3 つのチャネルのそれぞれに対してマトリックスを作成し、マージ機能を使用します。この質問への回答を見る

于 2013-01-30T16:33:36.650 に答える
3

規則では、 typeCV_8UC3の場合、ピクセル値の範囲は から0まで255、 typeの場合CV_32FC3は から0.0まで1.0です。255.0したがって、 の代わりに の倍率を使用する必要があります1.0

Mat::convertTo(newImage, CV_32FC1, 255.0);
于 2013-06-13T10:34:56.313 に答える