将RGB颜色空间转换到Lab,修改一幅图像的颜色;

/*
 * color_transfer.cpp
 *
 *  Created on: May 21, 2018
 *      Author: cui
 */

#include <opencv2/opencv.hpp>
#include <opencv2/imgproc.hpp>

using namespace cv;
using namespace std;

int main( int argc, char *argv[] )
{
    Mat src, tar;
    src = imread( argv[1] );
    if( src.empty() ){
        cout << "Couldn't load image" << endl;
        return -1;
    }

tar = imread( argv[2] );
    if( tar.empty() ){
        cout << "Couldn't load image" << endl;
        return -1;
    }

//变换到Lab和CV_32FC1
    Mat src_lab, tar_lab;
    cvtColor( src, src_lab, COLOR_BGR2Lab );
    cvtColor( tar, tar_lab, COLOR_BGR2Lab );
    src_lab.convertTo( src_lab, CV_32FC1);
    tar_lab.convertTo( tar_lab, CV_32FC1);

//为每幅图像找到每个通道的标准值和std值
    Mat mean_src, mean_tar, stdd_src, stdd_tar;
    meanStdDev( src_lab, mean_src, stdd_src );
    meanStdDev( tar_lab, mean_tar, stdd_tar );

//拆分成独立的通道
    vector<Mat> src_chan, tar_chan;
    split( src_lab, src_chan );
    split( tar_lab, tar_chan );

//为每个通道计算颜色分布
    for( int i = 0; i < 3; i++ ){
        tar_chan[i] -= mean_tar.at<double>(i);
        tar_chan[i] *= (stdd_src.at<double>(i) /stdd_src.at<double>(i) );
        tar_chan[i] += mean_src.at<double>(i);
        cout << "mean_tar[" << i << "]: " <<  mean_tar.at<double>(i) << endl;
        cout << "stdd_src.at<double>(" << i << "): " <<  stdd_src.at<double>(i) << endl;
        cout << "(stdd_src.at<double>(i) /stdd_src.at<double>(i) )" <<
                (stdd_src.at<double>(i) /stdd_src.at<double>(i) ) << endl;
    }

//合并通道,转换到CV_8UC1的每个通道,并转换到BGR
    Mat output;
    merge( tar_chan, output );
    output.convertTo( output, CV_8UC1 );
    cvtColor( output, output, COLOR_Lab2BGR );

namedWindow( "Source Image", WINDOW_AUTOSIZE );
    imshow("Source Image", src);
    namedWindow( "Target Image", WINDOW_AUTOSIZE );
    imshow("Target Image", tar);
    namedWindow( "Result Image", WINDOW_AUTOSIZE );
    imshow("Result Image", output);
    imwrite("result.jpg", output);
    waitKey(0);
    return 0;
}

结果

OpenCV 改变图片颜色 C++相关推荐

  1. OpenCV for Python之改变图片颜色

    OpenCV for Python之改变图片颜色 1.环境 2 直接修改通道值 3.与.或.非.异或操作 Opencv4 官方文档 : https://docs.opencv.org/4.2.0/ O ...

  2. 使用asp.net改变图片颜色

    最近奇葩经理提出了奇葩的需求,要能在网站上改变图片的颜色,比如灰色的变成彩色,彩色的变成灰色,尼玛楼主的感受你们不懂!于是有了下面的代码... 用法:调用update_pixelColor方法并传参数 ...

  3. iOS 改变图片颜色

    在做项目的时候碰到了一个需求,把app的主题颜色改变成另外一种颜色,由于没有给出新的素材图片,需要把现有图片的颜色改变一下.下面是改变图片颜色的方法(一般对于单一颜色的图片) imageWithRen ...

  4. html怎么改变图片亮度,纯干货,前端学者的福音!如何使用css滤镜改变图片颜色...

    原标题:纯干货,前端学者的福音!如何使用css滤镜改变图片颜色 说到对图片进行处理,我们经常会想到PS,美图秀秀这类的图像处理工具.作为前端,全栈开发者,我们经常会需要处理一些特效,例如根据不同的状态 ...

  5. 图片使用css3滤镜改变图片颜色

    图片使用css3滤镜改变图片颜色 使用css3滤镜改变图片的颜色 代码如下 使用css3滤镜改变图片的颜色 我们在开发页面的时候,会遇到同一张图片滑过或点击的时候改变图片背景或颜色,一般情况下UI设计 ...

  6. Android 使用ColorMatrix改变图片颜色

    ColorMatrix的颜色矩阵介绍 颜色矩阵M是一个5*4的矩阵,在Android中,颜色矩阵M是以一维数组m=[a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t]的方 ...

  7. 如何用OpenCV改变图片的大小?

    前言 改变图片的大小(resize)是一项很有用的基本技能,它能让图片拥有我们想要的大小.比如在初学阶段,我们在实践时所用的图片的太大,屏幕上显示时观感不好,可以利用这一项技能把图片变小. 具体操作 ...

  8. 利用CSS改变图片颜色的100种方法!

    (给前端大全加星标,提升前端技能) 来源: 前端指南 前言 "说到对图片进行处理,我们经常会想到PhotoShop这类的图像处理工具.作为前端开发者,我们经常会需要处理一些特效,例如根据不同 ...

  9. html图片颜色变深,利用CSS改变图片颜色的100种方法!

    前言 "说到对图片进行处理,我们经常会想到PhotoShop这类的图像处理工具.作为前端开发者,我们经常会需要处理一些特效,例如根据不同的状态,让图标显示不同的颜色.或者是hover的时候, ...

最新文章

  1. 解决虚拟机vmware安装64位系统“此主机支持 Intel VT-x,但 Intel VT-x 处于禁用状态”的问题
  2. 库克笑了,说要给股东多分红:换了M1后Mac销售额增长70%,iPhone也增长66%
  3. Protobuf windows
  4. 关于org.apache.lucene.queryParser.ParseException: Encountered 解决方法
  5. 图片被遮住一部分能复原吗_真的准确吗?就是这张图片自称能检测出你的眼睛近视不近视...
  6. 代码审计之Catfish CMS v4.5.7后台作者权限越权两枚+存储型XSS一枚
  7. How to Get Name of Months in ABAP/4
  8. pycharm专业版(window)安装
  9. 【CSS 】动画animation
  10. google 图表(chart)
  11. 洗礼灵魂,修炼python(42)--巩固篇—type内置函数与类的千丝万缕关系
  12. 题解:SPOJ1026 Favorite Dice
  13. 第 1 章 Readme
  14. Nokia Booklet 3G试用小记
  15. 如何清除BIOS密码
  16. andriod搭建自己的轮询框架
  17. 【基金量化研究系列】大类资产配置研究(六)——多资产风险平价策略
  18. RPG游戏中造过的BUG
  19. 初识Vue——八皇后小游戏
  20. 3D游戏-作业三-空间与运动

热门文章

  1. 树莓派 禁止屏幕关闭
  2. GO 快递接口开发(快递鸟)
  3. 网页js打开微信小程序示例
  4. vue中数据异步更新($nextTick)的问题
  5. torch.quantile or np.quantile的计算
  6. java时间比较3种方式
  7. [\w-]与[\w]-的区别
  8. 新用户创作打卡挑战赛正在进行中
  9. devcontainer 靶机
  10. golang json序列化与反序列化