gpt4 book ai didi

c++ - 使用 OpenCV C++ 交换 RGB channel 颜色

转载 作者:行者123 更新时间:2023-12-03 12:49:03 27 4
gpt4 key购买 nike

天真的问题,我是第一次使用颜色处理。我想从 Mat 图像中交换 RGB channel 。我正在尝试从原始图像创建另一个图像,并将 R 和 G 值指定为 R。然后在另一个图像上,将 R 和 G 值指定为 G。这是我的代码:

Mat testcolor = imread("tulip.jpg", CV_LOAD_IMAGE_COLOR);
int rows = testcolor.rows;
int cols = testcolor.cols;

Mat leftimg(rows, cols, CV_8UC3);
Mat rightimg(rows, cols, CV_8UC3);

cvtColor(testcolor, testcolor, COLOR_RGB2BGR);
for (int i = 0; i < testcolor.rows; i++) {
for (int j = 0; j < testcolor.cols; j++ ){
leftimg.at<Vec3b>(i, j)[0] = testcolor.at<Vec3b>(i,j)[0];
leftimg.at<Vec3b>(i, j)[1] = testcolor.at<Vec3b>(i,j)[0];
leftimg.at<Vec3b>(i, j)[2] = testcolor.at<Vec3b>(i,j)[2];

rightimg.at<Vec3b>(i, j)[0] = testcolor.at<Vec3b>(i, j)[1];
rightimg.at<Vec3b>(i, j)[1] = testcolor.at<Vec3b>(i, j)[1];
rightimg.at<Vec3b>(i, j)[2] = testcolor.at<Vec3b>(i, j)[2];
}
}

cvtColor(leftimg, leftimg, COLOR_BGR2RGB);
imwrite("leftimg.png", leftimg);
cvtColor(rightimg, rightimg, COLOR_BGR2RGB);
imwrite("rightimg.png", rightimg);

但我认为我没有得到预期的结果。这是原始图像。 This is the original image

这是结果图像: enter image description here

我期望类似的结果,如果我将 R 和 G 指定为 R --> 绿色部分将有一些红色阴影。如果我将 R 和 G 指定为 G,则红色部分会有一些绿色阴影。我的代码中遗漏了什么吗?还是我缺乏理解?

在本例中,我没有原始图像,也没有转换颜色空间,因为我想看看它如何与 RGB 配合使用。然后,如果需要,我稍后会转换颜色空间。

最佳答案

在您当前的实现中,如果在执行 (R,G)->R 转换时像素处的 RGB 值是 ( 100, 150, 200 ),您最终将得到值 ( 100, 100, 200 )。因此像素将同时具有红色和绿色分量。

但是,我相信,您想要的结果是像素中没有绿色分量的图像。

为此,您必须对每个像素执行以下操作。

R = Function( R, G )
and
G = 0

对于每个像素。

这里的函数代表您想要组合像素的 R 和 G 值以形成该像素的新 R 值的方式。由于您将 G 设置为 0,因此该像素中不会有绿色阴影。

关于c++ - 使用 OpenCV C++ 交换 RGB channel 颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47936776/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com