Reinhard颜色迁移算法的过程很简单,流程如下,细节部分见原文,题目为color transfer between images:

  1. 将参考图片和目标图片转换到LAB空间下
  2. 得到参考图片和目标图片的均值和标准差
  3. 对目标图片的每一个像素值,减去目标图像均值然后乘上参考图片和目标图片标准差的比值,再加上参考图像均值
  4. 将目标图片转换到RGB空间

将RGB图片转换到LAB空间很重要,因为LAB空间能降低三原色之间的相关性,如果不转换,结果会有很大的不同

# -*- coding: utf-8 -*-

import cv2
import numpy as np
image = cv2.imread('des.jpg')
image = cv2.cvtColor(image,cv2.COLOR_BGR2LAB)
original = cv2.imread('src.jpg')
original = cv2.cvtColor(original,cv2.COLOR_BGR2LAB) def getavgstd(image):    //得到均值和标准差
avg = []
std = []
image_avg_l = np.mean(image[:,:,0])
image_std_l = np.std(image[:,:,0])
image_avg_a = np.mean(image[:,:,1])
image_std_a = np.std(image[:,:,1])
image_avg_b = np.mean(image[:,:,2])
image_std_b = np.std(image[:,:,2])
avg.append(image_avg_l)
avg.append(image_avg_a)
avg.append(image_avg_b)
std.append(image_std_l)
std.append(image_std_a)
std.append(image_std_b)
return (avg,std) image_avg,image_std = getavgstd(image)
original_avg,original_std = getavgstd(original) height,width,channel = image.shape
for i in range(0,height):
for j in range(0,width):
for k in range(0,channel):
t = image[i,j,k]
t = (t-image_avg[k])*(original_std[k]/image_std[k]) + original_avg[k]
t = 0 if t<0 else t
t = 255 if t>255 else t
image[i,j,k] = t
image = cv2.cvtColor(image,cv2.COLOR_LAB2BGR)
cv2.imwrite('out.jpg',image)

结果如下:

python opencv 实现Reinhard颜色迁移算法的更多相关文章

  1. python opencv 检测特定颜色

    import cv2 import numpy as np cap = cv2.VideoCapture(0) # set blue thresh 设置HSV中蓝色.天蓝色范围 lower_blue ...

  2. python opencv 利用Lab空间把春天的场景改为秋天

    前一段时间实现了Reinhard颜色迁移算法,感觉挺有意思的,然后在代码上随意做了一些更改,有了一些发现,把Lab通道的a通道值改为127左右,可以将绿色改为黄色,而对其他颜色的改动非常小,因此可以将 ...

  3. 【python+opencv】直线检测+圆检测

     Python+OpenCV图像处理—— 直线检测 直线检测理论知识: 1.霍夫变换(Hough Transform) 霍夫变换是图像处理中从图像中识别几何形状的基本方法之一,应用很广泛,也有很多改进 ...

  4. python+opencv实现车牌定位

    写在前面 HIT大三上学期视听觉信号处理课程中视觉部分的实验三,经过和学长们实验的对比发现每一级实验要求都不一样,因此这里标明了是2019年秋季学期的视觉实验三. 由于时间紧张,代码没有进行任何优化, ...

  5. Python+opencv 图像拼接

    1.http://www.cnblogs.com/skyfsm/p/7411961.html ,给出了很好地拼接算法实现 2.由于不是Python的,所以简单做了一些翻译转成Python+opencv ...

  6. linux/ubuntu下最简单好用的python opencv安装教程 ( 解决 imshow, SIFT, SURF, CSRT使用问题)

    希望这篇文章能彻底帮你解决python opencv安装和使用中的常见问题. 懒人请直奔这一节, 一条命令安装 opencv 使用python-opencv常用的问题 在linux中使用python版 ...

  7. 【Python | opencv+PIL】常见操作(创建、添加帧、绘图、读取等)的效率对比及其优化

    一.背景 本人准备用python做图像和视频编辑的操作,却发现opencv和PIL的效率并不是很理想,并且同样的需求有多种不同的写法并有着不同的效率.见全网并无较完整的效率对比文档,遂决定自己丰衣足食 ...

  8. 一个简单的统计图像主颜色的算法(C#源代码)

    前段日子有朋友咨询了下分析图像主颜色的算法,我对这一块也没有什么深入的研究,参考了一些小代码,然后自己写了一个很简单的小工具,现共享给大家. 界面截图如下: 算法的原理很简单,就是统计出图像中各种颜色 ...

  9. 搭建基于python +opencv+Beautifulsoup+Neurolab机器学习平台

    搭建基于python +opencv+Beautifulsoup+Neurolab机器学习平台 By 子敬叔叔 最近在学习麦好的<机器学习实践指南案例应用解析第二版>,在安装学习环境的时候 ...

随机推荐

  1. windows下读取磁盘扇区数据

    在Windows下,磁盘可以看做是一个文件,其文件名为\\\\.\\PhysicalDriveX,其中X表示磁盘的编号,例如\\\\.\\PhysicalDrive0表示的是第0号磁盘,如果需要读取一 ...

  2. 【emWin】例程三:显示方向的切换

    实验指导书及代码包下载: http://pan.baidu.com/s/1pK9o0xP

  3. UPDATE INNER JOIN 两表联合更新

    UPDATE B_READMETER_HANDWORK INNER JOIN B_READMETER_ORDER_SP ON B_READMETER_HANDWORK.ID = B_READMETER ...

  4. Flink - InstanceManager

    InstanceManager用于管理JobManager申请到的taskManager和slots资源 /** * Simple manager that keeps track of which ...

  5. URL转Drawable之 Android中获取网络图片的三种方法

    转载自: http://doinone.iteye.com/blog/1074283 Android中获取网络图片是一件耗时的操作,如果直接获取有可能会出现应用程序无响应(ANR:Applicatio ...

  6. js自定义弹出框

    js自定义弹出框: 代码如下 <html> <head><title>自定义弹出对话框</title> <style type ="te ...

  7. 总结Lvs、nginx、Haproxy

    !!!! 参考的比较多,自己想法少 大神总结的比较好 ====>http://www.ha97.com/5646.html 特性  LVs Nginx Haproxy 工作层 四层(传输层) 七 ...

  8. QStandardItemModel-Delegate

    //delete.h #ifndef DELEGATE_H #define DELEGATE_H #include<QItemDelegate> #include<QModelInd ...

  9. JavaScript作用域和闭包

    在JavaScript中,作用域是执行代码的上下文.作用域有3种类型: 1.全局作用域 2.局部作用域---(又叫函数作用域) 3.eval作用域 var foo =0;//全局作用域console. ...

  10. C# 中GUID生成格式的四种格式

    var uuid = Guid.NewGuid().ToString(); // 9af7f46a-ea52-4aa3-b8c3-9fd484c2af12 var uuidN = Guid.NewGu ...