zoukankan      html  css  js  c++  java
  • python opencv 实现Reinhard颜色迁移算法

    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)

    结果如下:

  • 相关阅读:
    NXOpen测量柱面两条边的最近距离
    NXOpen打开当前部件所在目录
    NXOpen 一键移除参数
    NXOpen 特征、体、线、圆弧、点通过迭代器遍历
    NXOpen批量创建部件
    NXOpen 创建圆柱面中心线
    NXOpen创建基准座标
    NXOpen 通过迭代器获取工作部件的体、面、边、点
    NXOpen 通过部件迭代器获取已加载部件的全路径
    NXOpen 批量导出STP、IGS、DWG、DXF、PDF(五合一)
  • 原文地址:https://www.cnblogs.com/likethanlove/p/6003677.html
Copyright © 2011-2022 走看看