OpenCV——饱和度调整

参考:

闲人阿发伯的博客

// define head function
#ifndef PS_ALGORITHM_H_INCLUDED
#define PS_ALGORITHM_H_INCLUDED
#include <iostream>
#include <string>
#include "cv.h"
#include "highgui.h"
#include "cxmat.hpp"
#include "cxcore.hpp"
using namespace std;
using namespace cv;
void Show_Image(Mat&, const string &);

#endif // PS_ALGORITHM_H_INCLUDED

/*
This program adjust
the saturation.
*/
#include "PS_Algorithm.h"
#include <time.h>
using namespace std;
using namespace cv;
int main(void)
{
    string Img_name("4.jpg");
    Mat Img;
    Img=imread(Img_name);
    Show_Image(Img, Img_name);
    Mat Img_out(Img.size(), CV_32FC3);
    Img.convertTo(Img_out, CV_32FC3);
    Mat Img_in(Img.size(), CV_32FC3);
    Img.convertTo(Img_in, CV_32FC3);
    // define the iterator of the input image
    MatIterator_<Vec3f> inp_begin, inp_end;
    inp_begin=Img_in.begin<Vec3f>();
    inp_end =Img_in.end<Vec3f>();

    // define the iterator of the output image
    MatIterator_<Vec3f> out_begin, out_end;
    out_begin=Img_out.begin<Vec3f>();
    out_end =Img_out.end<Vec3f>();

    // increment (-100.0, 100.0)
    float Increment=-50.0/100.0;

    float delta=0;
    float minVal, maxVal;
    float t1, t2, t3;
    float L,S;
    float alpha;

    for(; inp_begin!=inp_end; inp_begin++, out_begin++)
    {
        t1=(*inp_begin)[0];
        t2=(*inp_begin)[1];
        t3=(*inp_begin)[2];

        minVal=std::min(std::min(t1,t2),t3);
        maxVal=std::max(std::max(t1,t2),t3);
        delta=(maxVal-minVal)/255.0;
        L=0.5*(maxVal+minVal)/255.0;
        S=std::max(0.5*delta/L, 0.5*delta/(1-L));

        if (Increment>0)
        {
            alpha=max(S, 1-Increment);
            alpha=1.0/alpha-1;
            (*out_begin)[0]=(*inp_begin)[0]+((*inp_begin)[0]-L*255.0)*alpha;
            (*out_begin)[1]=(*inp_begin)[1]+((*inp_begin)[1]-L*255.0)*alpha;
            (*out_begin)[2]=(*inp_begin)[2]+((*inp_begin)[2]-L*255.0)*alpha;
        }
        else
        {
            alpha=Increment;
            (*out_begin)[0]=L*255.0+((*inp_begin)[0]-L*255.0)*(1+alpha);
            (*out_begin)[1]=L*255.0+((*inp_begin)[1]-L*255.0)*(1+alpha);
            (*out_begin)[2]=L*255.0+((*inp_begin)[2]-L*255.0)*(1+alpha);

        }
    }
    Img_out=Img_out/255.0;
    Show_Image(Img_out, "out");
    imwrite("out.jpg", Img_out*255);
    waitKey();
    cout<<"All is well."<<endl;
}

// define the show image
#include "PS_Algorithm.h"
#include <iostream>
#include <string>

using namespace std;
using namespace cv;

void Show_Image(Mat& Image, const string& str)
{
    namedWindow(str.c_str(),CV_WINDOW_AUTOSIZE);
    imshow(str.c_str(), Image);

}

原图

效果图

时间: 2024-11-05 18:44:56

OpenCV——饱和度调整的相关文章

Photoshop图像处理算法—饱和度调整

前言:之前在公司做项目的用到photoshop颜色空间的一些相关方法,在此总结一下.下面原理部分是从我的总结文档里截取来的.需要复制的童鞋自己手写一下~ 2.程序部分 1)Matlab实验程序. <span style="font-size:18px;">clc;clear all;close all; Image=imread('Fotor_LomoOrg.bmp'); Image=double(Image); R=Image(:,:,1); G=Image(:,:,2)

OpenCV入门 - 调整图片尺寸

OpenCV入门 - 调整图片尺寸(image resize) 通过Mat::size()方法得到关于图像大小的Size实例,通过resize方法调整图像大小.代码如下: #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include <opencv2/nonfree/features2d.hpp> // #include <opencv2/imgproc/imgpr

OpenCV——黑白调整

参考算法: 闲人阿发伯的博客 // define head function #ifndef PS_ALGORITHM_H_INCLUDED #define PS_ALGORITHM_H_INCLUDED #include <iostream> #include <string> #include "cv.h" #include "highgui.h" #include "cxmat.hpp" #include "

Unity Shader-后处理:简单的颜色调整(亮度,饱和度,对比度)

好久没坚持写blog了,是时候开始撸一波新博文了!学习Unity有一段时间了,关于Shader的书也看了几本<Unity Shader入门精要>,<Unity 3D ShaderLab 开发实战详解>,开一个系列记录一下学习的心得笔记.原理就不多讲了,一篇一个实际Shader样例就好了. 貌似一开始关于shader的讲解都是diffuse,不过,我赶脚后处理貌似更简单,所以第一篇来一发简单后处理,屏幕的简单颜色校正--调整亮度,饱和度,对比度. 一.概念介绍 我们在做游戏的时候,虽

ISP模块之色彩增强算法--HSV空间Saturation通道调整 .

色彩增强不同于彩色图像增强,图像增强的一般处理方式为直方图均衡化等,目的是为了增强图像局部以及整体对比度.而色彩增强的目的是为了使的原有的不饱和的色彩信息变得饱和.丰富起来.对应于Photoshop里面的“色相/饱和度”调节选项里面对饱和度的操作.色彩增强的过程,并不改变原有彩色图像的颜色以及亮度信息. 在我的色彩增强算法模块里面,始终只针对色彩饱和度(Saturation)信息做研究,调整.这样的话,那就不得不介绍HSV颜色空间了,H代表Hue(色彩),S代表Saturation(饱和度),V

1 色相、饱和度、明度定义

色彩三要素(Elements of color)色彩可用的色调(色相).饱和度(纯度)和明度来描述.人眼看到的任一彩色光都是这三个特性的综合效果,这三个特性即是色彩的三要素,其中色调与光波的波长有直接关系,亮度和饱和度与光波的幅度有关. 1.1 色相定义 色彩是由于物体上的物理性的光反射到人眼视神经上所产生的感觉.色的不同是由光的波长的长短差别所决定的.作为色相,指的是这些不同波长的色的情况.波长最长的是红色,最短的是紫色.把红.橙.黄.绿.蓝.紫和处在它们各自之间的红橙.黄橙.黄绿.蓝绿.蓝紫

图像处理之色相、饱和度、明度

1 色相.饱和度.明度定义 色彩三要素(Elements of color)色彩可用的色调(色相).饱和度(纯度)和明度来描述.人眼看到的任一彩色光都是这三个特性的综合效果,这三个特性即是色彩的三要素,其中色调与光波的波长有直接关系,亮度和饱和度与光波的幅度有关. 1.1 色相定义 色彩是由于物体上的物理性的光反射到人眼视神经上所产生的感觉.色的不同是由光的波长的长短差别所决定的.作为色相,指的是这些不同波长的色的情况.波长最长的是红色,最短的是紫色.把红.橙.黄.绿.蓝.紫和处在它们各自之间的

最详尽的PS色相调整最实用技巧介绍

这张图里的数字是经过我改过的,主要就是为了方便大家理解.是为了和色相调节相匹配.这里的数值相当于色相的数值.-180--0--180.和这张图的角度相对应.这张图可以看成每两个颜色之间相差60度.QANDA.REN计算机学习 干货:PS色相调整最实用技巧介绍 首先,做一个试验,新建一个图层,Ctrl+J复制图层,一般复制一下图层会比较安全,最好养成习惯.绘制三种颜色的矩形框.分别填充红色(R=255    G=0     B=0).绿色(R=0    G=255     B=0).蓝色(R=0

UnityShader:HSV(色相,饱和度,亮度)转换

http://blog.csdn.net/costfine/article/details/46930473 发现其实美术调整颜色的时候大部分都是调整的HSV,因为可以方便的分别调整色相(hue).饱和度(saturation)和色调(value).例如人们要将颜色调整的偏红一点,那么只需要修改色相, 如果使用RGB的话,就需要同时调整3个值,仅仅只是增加R值的话,理论上讲,只是把红色值加重了而已.就算是平时使用的调色板,大部分也是按照HSV来的,例如U3D的调色板:  颜色空间有很多中,RGB