如何减少图像中的黄色成分?

时间:2014-02-14 19:23:38

标签: opencv

我试图通过使用对数映射在OpenCV中实现色调映射,但我得到的结果是黄色图像。所以我想减少图像中的黄色成分并增加其他颜色。任何建议或意见将不胜感激。谢谢。 色调映射图像:Its pink color image

2 个答案:

答案 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();
}

结果如下: enter image description here

答案 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()条件。