窝牛号

基于OpenCv的快速图片颜色交换,轻松实现图片背景更换

图片颜色更换

图片颜色转换

当我们有2张图片,很喜欢第一张图片的颜色,第2张图片的前景照片,很多时候我们需要PS进行图片的颜色转换,这当然需要我们有强大的PS功底,当然小编这里不是介绍PS的,我们使用代码完全可以代替PS 进行图片的颜色转换

图片颜色转换步骤:

· 步骤1: 输入source和target 2张图片

· 步骤2: 将source和target图像都转换为L * a * b *颜色空间什么是LAB 颜色空间,我们在讨论物体颜色追踪时有讨论,可以参考此部分的文章分享

基于物体颜色的目标追踪,打造属于自己的天眼追踪系统

· 步骤3: 为source和target图像计算每个L * a * b *通道的平均值和标准差。

· 步骤4:从target通道中 减去target图像的L * a * b *通道的平均值。

· 第5步:按标准偏差target除以source的标准偏差乘以LAB通道 缩放target 通道。

· 步骤6: 加上source图片L * a * b *通道的均值。

· 步骤7: 裁剪掉[0,255]范围之外的所有值。

· 步骤8: 合并LAB空间。

· 步骤9: 从L * a * b *空间转换回RGB颜色空间。

· 步骤10:显示图片

python代码实现图片颜色更换

有了以上步骤,我们采用python代码进行实现:

在正式进入主函数前,我们首先建立2个函数,一个用来计算图片在LAB空间内的均值与方差

一个用来显示图片(这里主要是resize图片,避免有些图片太大无法在屏幕上完全显示,当然,这个函数你可以完全不用,直接使用imshow函数来显示图片即可)

import numpy as np import cv2 resize 图片并显示 def show_image(title, image, width = 300): r = width / float(image.shape[1]) dim = (width, int(image.shape[0] * r)) resized = cv2.resize(image, dim, interpolation = cv2.INTER_AREA) cv2.imshow(title, resized)

代码截图

按照步骤

39;11.png&39;13.png& 2 转换颜色空间到LAB source = cv2.cvtColor(source_img, cv2.COLOR_BGR2LAB).astype(&34;) target = cv2.cvtColor(target_img, cv2.COLOR_BGR2LAB).astype(&34;) 4 从target LAB通道中 减去target图像的L * a * b *通道的平均值 (l, a, b) = cv2.split(target) l -= lMeanTar a -= aMeanTar b -= bMeanTar 6 加上source图片L * a * b *通道的均值 l += lMeanSrc a += aMeanSrc b += bMeanSrc

代码截图

8 合并LAB空间 transfer = cv2.merge([l, a, b]) 34;uint8& 10 显示图片 show_image(&34;, source_img) show_image(&34;, target_img) show_image(&34;, transfer) cv2.waitKey(0)

代码截图

按照以上10个步骤,便可以成功进行图片的颜色转换,首先来一直效果图

本站所发布的文字与图片素材为非商业目的改编或整理,版权归原作者所有,如侵权或涉及违法,请联系我们删除

窝牛号 wwww.93ysy.com   沪ICP备2021036305号-1