天真的问题,我第一次使用颜色处理。我想从Mat图像交换RGB通道。我正在尝试从原始图像创建另一个图像并将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);
这是结果图像:qazxsw poi
我期待类似的东西,如果我将R和G指定为R - >绿色部分会有一些红色阴影。如果我将R和G指定为G,则红色部分将具有一些绿色阴影。我在代码中遗漏了什么吗?或者我缺乏理解?
在这种情况下,我没有原始图像,我没有转换我的色彩空间,因为我想看看它如何与RGB一起工作。然后,如果需要,我稍后将转换颜色空间。
如果我们混合不同的B-G-R成分,我们可以获得比B-G-R更多的成分。如:R = Function( R, G )
and
G = 0
; B(high)+G(high)+R(low) => Yellow
。
这是一个例子:
B(high)+G(low)+R(high) => Purple
依赖渠道如下:
现在回到你的花卉图像,和R
渠道的巨大差异是G
。如果你用Red flowers regions
替换G
,那么这些区域就变成了R
。如果你用B(low) + R(high) + R(high) => yellow
替换R
,那么就成为G
。
B(low) + G(low) + G(low) => dark
这里有一个在HSV中找到绿色的例子。