I need to create a 'red' image from a grayscale image. I am using this code:
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
With some explanations:
void build_red(const cv::Mat& in, cv::Mat& out) {
in is the input matrix, out the output.
out = Mat::zeros(in.rows, in.cols, CV_8UC1);
allocate some space for out (may be useless, but part of my attempts)
Mat zeros = Mat::zeros(in.rows, in.cols, CV_8UC1);
Mat tmp;
in.convertTo(tmp, CV_8UC1);
Create an empty matrix with the same size and convert the input image to single-channel 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);
Create a vector with three channels, then merge them into 'out'.
However, when I run the code I get the following message:
Using 3 channels
and the following exception:
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
Could you please help me? From my inexperienced point of view, the type of the images is the same and the number of channels is correct.