我有两个输入图像,它们是灰度,我创建了另一个图像,它是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);
Run Code Online (Sandbox Code Playgroud)
我曾尝试使用该mixChannels命令将img输入写入aboveLeft第一个通道,但我无法找出正确的语法并获得断言错误.
这是填写频道的正确方法吗?
我假设img并且img2具有相同的尺寸和类型.
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);
Run Code Online (Sandbox Code Playgroud)
假设您有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);
Run Code Online (Sandbox Code Playgroud)
正如评论中指出的那样,您需要找到一种方法来找出您想要的蓝色频道!
| 归档时间: |
|
| 查看次数: |
8784 次 |
| 最近记录: |