我试图通过使用对数映射在OpenCV中实现色调映射,但我得到的结果是黄色图像。所以我想减少图像中的黄色成分并增加其他颜色。任何建议或意见将不胜感激。谢谢。 色调映射图像:
答案 0 :(得分:1)
您可以尝试将图像转换为HSV颜色空间和偏移颜色(只需移动Hue组件)。
或者以相对于G的相同比率减少R和B分量。
这是我的实施:
#include <iostream>
#include <vector>
#include <string>
#include <fstream>
#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;
int main(int argc, char **argv)
{
cv::namedWindow("result");
Mat img=imread("yellowish.jpg");
img.convertTo(img,CV_32FC3,1.0/255.0);
Scalar m;
m=cv::mean(img);
img-=m;
img+=Scalar(0.3,0.31,0.3); // Changing this you can adjust color balance.
normalize(img,img,0,1,cv::NORM_MINMAX);
imshow("result",img);
cv::waitKey(0);
cv::destroyAllWindows();
}
结果如下:
答案 1 :(得分:0)
将您的图片转换为HSV,如下所示:
cvtColor(image, hsv_image, CV_RGB2HSV);
然后拆分你的&#34; hsv_image&#34;进入各自的渠道:
Mat channel[3];
split( hsv_image, channel );
所以,现在你的channel[0]
是一个基于Hue组件的图像。通常是&#34;黄&#34;的价值颜色的色调范围为22-38。因此,现在可以访问您的色调图像的每个像素(即channel[0]
),并根据您的要求制定一些if()
条件。