python opencv 实现Reinhard颜色迁移算法
Reinhard颜色迁移算法的过程很简单,流程如下,细节部分见原文,题目为color transfer between images:
- 将参考图片和目标图片转换到LAB空间下
- 得到参考图片和目标图片的均值和标准差
- 对目标图片的每一个像素值,减去目标图像均值然后乘上参考图片和目标图片标准差的比值,再加上参考图像均值
- 将目标图片转换到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颜色迁移算法的更多相关文章
- python opencv 检测特定颜色
import cv2 import numpy as np cap = cv2.VideoCapture(0) # set blue thresh 设置HSV中蓝色.天蓝色范围 lower_blue ...
- python opencv 利用Lab空间把春天的场景改为秋天
前一段时间实现了Reinhard颜色迁移算法,感觉挺有意思的,然后在代码上随意做了一些更改,有了一些发现,把Lab通道的a通道值改为127左右,可以将绿色改为黄色,而对其他颜色的改动非常小,因此可以将 ...
- 【python+opencv】直线检测+圆检测
Python+OpenCV图像处理—— 直线检测 直线检测理论知识: 1.霍夫变换(Hough Transform) 霍夫变换是图像处理中从图像中识别几何形状的基本方法之一,应用很广泛,也有很多改进 ...
- python+opencv实现车牌定位
写在前面 HIT大三上学期视听觉信号处理课程中视觉部分的实验三,经过和学长们实验的对比发现每一级实验要求都不一样,因此这里标明了是2019年秋季学期的视觉实验三. 由于时间紧张,代码没有进行任何优化, ...
- Python+opencv 图像拼接
1.http://www.cnblogs.com/skyfsm/p/7411961.html ,给出了很好地拼接算法实现 2.由于不是Python的,所以简单做了一些翻译转成Python+opencv ...
- linux/ubuntu下最简单好用的python opencv安装教程 ( 解决 imshow, SIFT, SURF, CSRT使用问题)
希望这篇文章能彻底帮你解决python opencv安装和使用中的常见问题. 懒人请直奔这一节, 一条命令安装 opencv 使用python-opencv常用的问题 在linux中使用python版 ...
- 【Python | opencv+PIL】常见操作(创建、添加帧、绘图、读取等)的效率对比及其优化
一.背景 本人准备用python做图像和视频编辑的操作,却发现opencv和PIL的效率并不是很理想,并且同样的需求有多种不同的写法并有着不同的效率.见全网并无较完整的效率对比文档,遂决定自己丰衣足食 ...
- 一个简单的统计图像主颜色的算法(C#源代码)
前段日子有朋友咨询了下分析图像主颜色的算法,我对这一块也没有什么深入的研究,参考了一些小代码,然后自己写了一个很简单的小工具,现共享给大家. 界面截图如下: 算法的原理很简单,就是统计出图像中各种颜色 ...
- 搭建基于python +opencv+Beautifulsoup+Neurolab机器学习平台
搭建基于python +opencv+Beautifulsoup+Neurolab机器学习平台 By 子敬叔叔 最近在学习麦好的<机器学习实践指南案例应用解析第二版>,在安装学习环境的时候 ...
随机推荐
- Linux下安装搭建WordPress网站
WordPress简介 WordPress 是一种使用 PHP语言和 MySQL数据库开发的开源.免费的Blog(博客,网志)引擎,用户可以在支持 PHP 和 MySQL 数据库的服务器上建立自己的 ...
- Yii源码阅读笔记(三十三)
ServiceLocator,服务定位类,用于yii2中的依赖注入,通过以ID为索引的方式缓存服务或则组件的实例来定位服务或者组件: namespace yii\di; use Yii; use Cl ...
- 总结-java
Java核心技术总结 1.借用jar包编译java文件 javac -cp servlet-api.jar -d . HelloServlet.java
- macOS 10.12 解决模拟器不流畅的一段命令行
sudo sysctl -w kern.timer.coalescing_enabled=0
- python学习道路(day11note)(协程,同步与异步的性能区别,url爬网页,select,RabbitMq)
1.协程 #协程 又称微线程 是一种用户的轻量级线程 程序级别代码控制 就不用加机器 #不同函数 = 不同任务 A函数切到B函数没有进行cpu级别的切换,而是程序级别的切换就是协程 yelied #单 ...
- Clock rate
https://en.wikipedia.org/wiki/Clock_rate The clock rate typically refers to the frequency at which a ...
- 用php实现一个敏感词过滤功能
周末空余时间撸了一个敏感词过滤功能,下边记录下实现过程. 敏感词,一方面是你懂的,另一方面是我们自己可能也要过滤一些人身攻击或者广告信息等,具体词库可以google下,有很多. 过滤敏感词,使用简单的 ...
- zTree的内核
zTree的内核: * 结构 (function($){ //常量部分 //申明常量是因为这些数据是不能改变的,如果成了对象的属性,很容易就改 ...
- OC中的那些String
/--------操作字符串--NSString(静态字符串)--------------------- NSString * a = @"a+b+c+a+b+d"; NSArra ...
- DBA数据库:MySQL简述
一. 数据库介绍 什么是数据库? 数据库(Database)是按照数据结构来组织.存储和管理数据的仓库.每个数据库都有一个或多个不同的API用于创建,访问,管理,搜索和复制所保存的数据.我们也可以将数 ...