使用OpenCV更改图像的颜色

时间:2018-05-08 05:55:44

标签: c++ opencv

我是OpenCV的初学者,我使用ColorMap函数更改了图像的颜色,我还学习了如何使用查找表创建自己的custom colorMap。 我的问题是我有一个使用鼠标的调色板我点击调色板并从中选择任何颜色。我想用我选择的颜色改变图像的颜色。任何人都可以告诉我如何做到这一点。如果有人需要下面的自定义色彩映射评论的代码,我将提供代码。提前谢谢。

1 个答案:

答案 0 :(得分:1)

ColorMap不会仅使用一种颜色更改图像的颜色。它根据深度值改变图像的颜色,这就是我的想法。 此过程称为伪着色,使用其他图像更改原始图像的颜色。

OpenCV中,您可以使用Lookup TableLUT功能实现此目的。

我正在为你提供示例代码,其中我有一个调色板和一个灰度图像。

伪着色代码:

cvtColor(im.clone(), im, COLOR_GRAY2BGR);
uchar b[256], g[256], r[256];
int i = 0;
for (double x = 1; x <= palette.rows; ) {

    b[i] = palette.at<Vec3b>(x, palette.cols / 2)[0];
    g[i] = palette.at<Vec3b>(x, palette.cols / 2)[1];
    r[i] = palette.at<Vec3b>(x, palette.cols / 2)[2];
    i++;
    x += 3.109; 
}
Mat channels[] = { Mat(256,1, CV_8U, b), Mat(256,1, CV_8U, g), Mat(256,1, CV_8U, r) };
Mat lut;
cv::merge(channels, 3, lut);
Mat color;
cv::LUT(im, lut, color);

这对我来说是正确的。 这背后的基本逻辑首先是我将灰度图像转换为Bgr。然后我读取了调色板的值像素并将其存储在数组中。通过这个数组,我创建了一个查找表,使用merge函数存储这些值。使用该查找表和LUT函数,我只是将查找表的值放入我的新Mat变量,即color

注意:根据我的需要,我增加了x,因为我的调色板高度为800。因此,只需要输入256或更少的输入,我就x

增加了3.109

希望这有帮助。