Reinhard 颜色迁移小白指南

Reinhard 颜色迁移小白指南

本教程将手把手教你如何运行这段代码,完成 Reinhard 颜色迁移。我们会从 Anaconda 安装 开始,到 运行代码 进行图像处理,适合完全没有编程经验的用户。


1. 安装 Anaconda

Anaconda 是一个集成 Python 及其相关库的环境,方便管理和运行 Python 代码。
如果你已经安装了 Anaconda,可以跳过这一步。

安装步骤

  1. 下载 Anaconda

    • 访问 Anaconda 官网 选择适合你系统的版本(Windows/Mac/Linux)。
    • 下载安装包,推荐下载 64-bit 版本
  2. 安装 Anaconda

    • Windows 用户:双击安装包,按照提示安装,勾选 “Add Anaconda to PATH”(选项如果有的话)。
    • Mac/Linux 用户:运行 .sh 文件,跟随终端提示操作。
  3. 验证安装

    • Windows:打开 Anaconda Prompt(在开始菜单搜索 Anaconda)。
    • Mac/Linux:打开 终端(Terminal)
    • 输入:
      conda --version
      
      如果看到类似 conda 23.x.x,说明 Anaconda 已成功安装。

2. 创建 Python 环境

推荐创建一个新的 Python 3.9+ 环境,以确保兼容所有依赖库。

  1. 打开 Anaconda Prompt终端
  2. 创建一个新环境(这里我们叫它 color_transfer_env):
    conda create -n color_transfer_env python=3.9
    
  3. 激活环境
    conda activate color_transfer_env
    

3. 安装必要的库

这个代码用到了 OpenCVNumPyscikit-image,需要安装这些库。

激活的环境 中运行:

pip install opencv-python numpy scikit-image

等待安装完成后,即可继续。


4. 在 Anaconda 环境中使用 Spyder 运行代码

我们将使用 Spyder(一个 Python 代码编辑器和 IDE)在 正确的 Anaconda 环境 (color_transfer_env) 中运行 Reinhard 颜色转换代码


4.1. 安装 Spyder(如果未安装)

首先,确保你在正确的环境 color_transfer_env 中:

conda activate color_transfer_env

然后,安装 Spyder(如果尚未安装):

conda install spyder

4.2. 打开 Spyder

激活的环境 下运行:

spyder

这将启动 Spyder IDE。(color_transfer_env) C:\Users\yourusername>spyder 的括号中显示了你所在的激活的环境名(color_transfer_env),如果你将spyder安装在了该环境,这里输入spyder就能启动spyder。


4.3. 在 Spyder 中运行代码

  1. 打开代码文件

    • Spyder 中点击 File(文件)Open(打开)
    • 选择并打开 color_transform.py 文件。
  2. 修改代码中的文件路径

    • 找到代码中的路径部分:
      source_image_path = "D:/ia4u/videos/IHC/batch_test/test2.jpg"
      target_image_path = "D:/ia4u/videos/IHC/batch_test/target.jpg"
      output_image_path = "D:/ia4u/videos/IHC/batch_test/test2_transformed.jpg"
      
    • 修改路径,使其指向你自己的文件路径。例如:
      source_image_path = "C:/Users/你的用户名/Documents/test2.jpg"
      target_image_path = "C:/Users/你的用户名/Documents/target.jpg"
      output_image_path = "C:/Users/你的用户名/Documents/test2_transformed.jpg"
      
    • Windows 用户:建议使用 双斜杠 \\ 或者 r"路径" 方式 避免路径问题:
      source_image_path = r"C:\Users\你的用户名\Documents\test2.jpg"
      
  3. 运行代码

    • 点击 “Run”(运行) 按钮,或者使用快捷键 F5 运行代码。
  4. 查看结果

    • 代码执行完成后,输出的转换图片将保存到 output_image_path 指定的路径。
    • 确保 source_image_pathtarget_image_path 指向的文件存在,否则会报错。

4.4. 可能遇到的问题

  • 路径错误:请检查 source_image_pathtarget_image_path 是否正确,避免使用中文路径或特殊字符。
  • 库缺失
    • 如果运行时报 ModuleNotFoundError(模块未找到),请在 Spyder终端(IPython Console) 中运行:
      pip install opencv-python numpy scikit-image
      
  • Spyder 无法启动
    • 确保在 Anaconda 环境下安装了 Spyder:
      conda install spyder
      
    • 或者尝试:
      conda update spyder
      

5. 代码解析

这段代码实现 Reinhard 颜色迁移,主要作用是让一张图片的颜色风格尽可能接近另一张图片。具体过程如下:

  1. 读取两张图片

    source_bgr = cv2.imread(source_path)
    target_bgr = cv2.imread(target_path)
    
    • source_bgr:要改变颜色的图片。
    • target_bgr:目标颜色风格的图片。
  2. 转换颜色空间

    source_lab = cv2.cvtColor(source_bgr, cv2.COLOR_BGR2Lab)
    target_lab = cv2.cvtColor(target_bgr, cv2.COLOR_BGR2Lab)
    
    • 将 BGR 格式转换为 Lab 颜色空间,因为 Lab 空间更适合颜色匹配
  3. 计算通道均值和标准差

    src_mean, src_std = cv2.meanStdDev(src_float)
    tgt_mean, tgt_std = cv2.meanStdDev(tgt_float)
    
    • 计算 L、A、B 三个通道的 均值标准差,用于匹配颜色分布。
  4. 颜色迁移计算

    result_float = (src_float - src_mean[0][0]) * (tgt_std[0][0] / src_std[0][0]) + tgt_mean[0][0]
    
    • 这一步相当于用 目标图片的颜色分布 替换 源图片的颜色分布
  5. 转换回 RGB 并保存

    transformed_rgb = lab2rgb(transformed_lab) * 255
    io.imsave(output_path, transformed_rgb.astype(np.uint8))
    
    • 颜色调整完毕后,转换回 RGB 并保存。

6. 运行成功的标志

  • 终端会输出:
    Transformed image saved to: D:/ia4u/videos/IHC/batch_test/test2_transformed.jpg
    
  • 你可以到 D:/ia4u/videos/IHC/batch_test/ 文件夹下找到 test2_transformed.jpg,并检查颜色变化效果。

7. 可能遇到的问题

7.1. ModuleNotFoundError: No module named 'cv2'

原因:没有安装 OpenCV。
解决方案:重新运行:

pip install opencv-python

7.2. IOError: Could not open source image

原因:文件路径错误,图片不存在。
解决方案

  • 确保图片路径正确,可以尝试使用绝对路径,如:
    source_image_path = r"D:\ia4u\videos\IHC\batch_test\test2.jpg"
    
    Windows 需要用 r"" 方式避免 \ 转义问题。

7.3. AttributeError: module 'skimage.color' has no attribute 'lab2rgb'

原因:scikit-image 版本过低。
解决方案

pip install --upgrade scikit-image

总结

现在你已经学会了:
:white_check_mark: 安装 Anaconda
:white_check_mark: 创建 Python 环境并安装库
:white_check_mark: 运行 Python 代码
:white_check_mark: 实现 Reinhard 颜色迁移

试试看,看看转换后的图片效果吧!:rocket: