グレースケール画像から「赤」の画像を作成する必要があります。私はこのコードを使用しています:
void build_red(const cv::Mat& in, cv::Mat& out) {
out = Mat::zeros(in.rows, in.cols, CV_8UC1);
Mat zeros = Mat::zeros(in.rows, in.cols, CV_8UC1);
Mat tmp;
in.convertTo(tmp, CV_8UC1);
vector<Mat> ch;
ch.push_back(zeros);
ch.push_back(zeros);
ch.push_back(tmp);
cout << "Using " << ch.size() << " channels" << endl;
merge(ch, out);
} // build_red
いくつかの説明付き:
void build_red(const cv::Mat& in, cv::Mat& out) {
inは入力行列、outは出力です。
out = Mat::zeros(in.rows, in.cols, CV_8UC1);
アウトのためにいくらかのスペースを割り当てます(役に立たないかもしれませんが、私の試みの一部です)
Mat zeros = Mat::zeros(in.rows, in.cols, CV_8UC1);
Mat tmp;
in.convertTo(tmp, CV_8UC1);
同じサイズの空行列を作成し、入力画像をシングルチャネルucharに変換します。
vector<Mat> ch;
ch.push_back(zeros);
ch.push_back(zeros);
ch.push_back(tmp);
cout << "Using " << ch.size() << " channels" << endl;
merge(ch, out);
3つのチャネルを持つベクトルを作成し、それらを「out」にマージします。
ただし、コードを実行すると、次のメッセージが表示されます。
Using 3 channels
および次の例外:
OpenCV Error: Bad number of channels (Source image must have 1, 3 or 4 channels)
in cvConvertImage, file /[...]/libs/OpenCV-2.4.0/modules/highgui/src/utils.cpp,
line 611
terminate called after throwing an instance of 'cv::Exception'
what(): /[...]/libs/OpenCV-2.4.0/modules/highgui/src/utils.cpp:611:
error: (-15) Source image must have 1, 3 or 4 channels in function cvConvertImage
手伝っていただけませんか?私の経験の浅い観点からは、画像の種類は同じで、チャンネル数は正しいです。