• 大小: 113KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-06-08
  • 语言: 其他
  • 标签: OpenCV  

资源简介

Photoshop 的色相/饱和度调整,可以对全图、红、黄、绿、青、蓝、洋红六个通道进行设置。每个通道可设置: 色相(hue), 饱和度(satuation), 明度(Lightness)三个调整值。 另包含 多个颜色空间转换函数

资源截图

代码片段和文件信息

/*
 * ColorSpace.cpp
 *
 *  Created on: 2016年7月1日
 *      Author: Administrator
 */

#include “ColorSpace.hpp“

#include 
using namespace std;

#define MAX2(a b) ( (a) > (b) ) ?  (a) : (b)
#define MAX3(abc) ( ( (a) > (b) ) ?  MAX2( a c) : MAX2( b c ) )

#define MIN2(a b)  ( (a) < (b) ) ?  (a) : (b)
#define MIN3(abc) ( ( (a) < (b) ) ?  MIN2( a c ) : MIN2( b c ) )


#define SWAP(a b t)  do { t = a; a = b; b = t; } while(0)
#define CLIP_RANGE(value min max)  ( (value) > (max) ? (max) : (((value) < (min)) ? (min) : (value)) )
#define COLOR_RANGE(value)  CLIP_RANGE(value 0 255)


namespace cv {

/**
 * Convert BGR to Lab
 *
 * @param bgr [in] pointer to pixel data in Blue-Green-Red format each channel‘s value range [0 255]
 * @param lab [out] pointer to pixel data in L-a-b format
 *         L value range [0 1]
 *         a value range [0 1]
 *         b value range [0 1]
 */
void BGR2Lab(const uchar *bgr float *lab)
//void rgb2lab( float R float G float B float & l_s float &a_s float &b_s )
{
    float var_R = bgr[2] /255.0;
    float var_G = bgr[1] /255.0;
    float var_B = bgr[0] /255.0;


    if ( var_R > 0.04045 ) var_R = pow( (( var_R + 0.055 ) / 1.055 ) 2.4 );
    else                   var_R = var_R / 12.92;

    if ( var_G > 0.04045 ) var_G = pow( ( ( var_G + 0.055 ) / 1.055 ) 2.4);
    else                   var_G = var_G / 12.92;

    if ( var_B > 0.04045 ) var_B = pow( ( ( var_B + 0.055 ) / 1.055 ) 2.4);
    else                   var_B = var_B / 12.92;

    var_R = var_R * 100.;
    var_G = var_G * 100.;
    var_B = var_B * 100.;

    //Observer. = 2° Illuminant = D65
    float X = var_R * 0.4124 + var_G * 0.3576 + var_B * 0.1805;
    float Y = var_R * 0.2126 + var_G * 0.7152 + var_B * 0.0722;
    float Z = var_R * 0.0193 + var_G * 0.1192 + var_B * 0.9505;


    float var_X = X / 95.047 ;    //ref_X =  95.047   Observer= 2° Illuminant= D65
    float var_Y = Y / 100.000;    //ref_Y = 100.000
    float var_Z = Z / 108.883;   //ref_Z = 108.883

    if ( var_X > 0.008856 ) var_X = pow(var_X  ( 1./3. ) );
    else                    var_X = ( 7.787 * var_X ) + ( 16. / 116. );

    if ( var_Y > 0.008856 ) var_Y = pow(var_Y  ( 1./3. ));
    else                    var_Y = ( 7.787 * var_Y ) + ( 16. / 116. );

    if ( var_Z > 0.008856 ) var_Z = pow(var_Z  ( 1./3. ));
    else                    var_Z = ( 7.787 * var_Z ) + ( 16. / 116. );

    lab[0] = ( 116. * var_Y ) - 16.;
    lab[1] = 500. * ( var_X - var_Y );
    lab[2] = 200. * ( var_Y - var_Z );
}

/**
 * Convert Lab to BGR
 *
 * @param lab [in] pointer to pixel data in L-a-b format
 *         L value range [0 1]
 *         a value range [0 1]
 *         b value range [0 1]
 * @param bgr [out] pointer to pixel data in Blue-Green-Red format each channel‘s value range [0 255]
 */
void Lab2BGR(const  float *lab uchar *bgr)
//http://www.easyrgb.com/in

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件     124965  2016-07-09 17:08  building.jpg

     文件      15092  2016-07-04 03:39  ColorSpace.cpp

     文件       6671  2016-07-03 23:26  ColorSpace.hpp

     文件       5339  2016-07-05 00:00  HSL.cpp

     文件       1218  2016-09-11 19:49  HSL.hpp

     文件       1545  2016-09-11 19:56  demo_HSL.cpp

----------- ---------  ---------- -----  ----

               154830                    6


评论

共有 条评论