前言:
目前朋友们对“opencv改变颜色”大致比较看重,同学们都需要分析一些“opencv改变颜色”的相关文章。那么小编在网上网罗了一些有关“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 npimport cv2# 建立图片LAB空间均值与方差计算函数def image_info(image): (l, a, b) = cv2.split(image) (lMean, lStd) = (l.mean(), l.std()) (aMean, aStd) = (a.mean(), a.std()) (bMean, bStd) = (b.mean(), b.std()) return (lMean, lStd, aMean, aStd, bMean, bStd)
# 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)
按照步骤
# 1 加载图片source_img = cv2.imread('11.png')target_img = cv2.imread('13.png')# 2 转换颜色空间到LABsource = cv2.cvtColor(source_img, cv2.COLOR_BGR2LAB).astype("float32")target = cv2.cvtColor(target_img, cv2.COLOR_BGR2LAB).astype("float32")# 3计算图片LAB空间的均值与方差(lMeanSrc, lStdSrc, aMeanSrc, aStdSrc, bMeanSrc, bStdSrc) = image_info(source)(lMeanTar, lStdTar, aMeanTar, aStdTar, bMeanTar, bStdTar) = image_info(target)# 4 从target LAB通道中 减去target图像的L * a * b *通道的平均值(l, a, b) = cv2.split(target)l -= lMeanTara -= aMeanTarb -= bMeanTar# 5 按标准偏差target图片除以source图片的标准偏差乘以LAB通道 缩放target 通道l = (lStdTar / lStdSrc) * la = (aStdTar / aStdSrc) * ab = (bStdTar / bStdSrc) * b# 6 加上source图片L * a * b *通道的均值l += lMeanSrca += aMeanSrcb += bMeanSrc
# 7 裁剪掉[0,255]范围之外的所有值l = np.clip(l, 0, 255)a = np.clip(a, 0, 255)b = np.clip(b, 0, 255)# 8 合并LAB空间transfer = cv2.merge([l, a, b])# 9 转换颜色空间到BGRtransfer = cv2.cvtColor(transfer.astype("uint8"), cv2.COLOR_LAB2BGR)# 10 显示图片show_image("Source", source_img)show_image("Target", target_img)show_image("Transfer", transfer)cv2.waitKey(0)
按照以上10个步骤,便可以成功进行图片的颜色转换,首先来一直效果图
标签: #opencv改变颜色