如何在OpenCV中将灰度图像复制到RGB图像红色通道?

时间:2014-05-20 20:00:32

标签: c++ image opencv

我有两个输入图像,这是灰度,我正在创建一个图像,这是 RGB 并且应该在红色通道中包含一个灰色图像,在绿色中包含另一个。

Mat img, img2;
img =imread("above.jpg", CV_LOAD_IMAGE_GRAYSCALE);
img2 =imread("left.jpg", CV_LOAD_IMAGE_GRAYSCALE);

Mat * aboveLeft = new Mat(img.rows, img.cols, CV_LOAD_IMAGE_COLOR);

int from_to [] = {0,1};
cv::mixChannels(&img, 1, aboveLeft, 3, from_to, 1);

我已尝试使用mixChannels命令将img输入内容写入aboveLeft 第一个频道,但我无法弄清楚正确的语法并获得断言错误。

这是填写频道的正确方法吗?

3 个答案:

答案 0 :(得分:6)

我认为imgimg2具有相同的尺寸类型

cv::Mat img = cv::imread("above.jpg", CV_LOAD_IMAGE_GRAYSCALE);
cv::Mat img2 = cv::imread("left.jpg", CV_LOAD_IMAGE_GRAYSCALE);

std::vector<cv::Mat> images(3);
Mat black = Mat::zeros(img.rows, img.cols, img.type());
images.at(0) = black; //for blue channel
images.at(1) = img;   //for green channel
images.at(2) = img2;  //for red channel

cv::Mat colorImage;
cv::merge(images, colorImage);

答案 1 :(得分:5)

假设您有3个灰度矩阵,则可以使用cv::merge()

cv::Mat blue, green, red;
std::vector<cv::Mat> images(3);

// OpenCV works natively with BGR ordering
images.at(0) = blue;
images.at(1) = green;
images.at(2) = red;

cv::Mat color;
cv::merge(images, color);

正如评论中所指出的,你需要找到一种方法来找出你想要的蓝色通道!

答案 2 :(得分:0)

/ 使用OpenCV3
使用零来拍摄二进制图像 将其转换为灰色 然后使用
/

进行着色
cvtColor(Image, channels, CV_GRAY2BGR);
Mat bgr[3];

/ 将频道拆分为BGR /

split(channels, bgr);

bgr[0] = 0, bgr[1] = img2, bgr[2] = img;
merge(bgr, 3, channels);