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.
See Question&Answers more detail:os