Python实现RGB和Lab颜色空间互转

https://github.com/rubund/debian-home-assistant/blob/1a3e8f7e4b9ddec60a4380e141fb327d03ac69b5/homeassistant/util/color.py

在网上找了一圈,只找到C++版本的,有个python版本的只有RGB转Lab,只好自己写了。C++版本传送门,这里把原理已经写的很清楚了,我只是比葫芦画瓢的写个python版本,没做任何优化。只有一点需要小心,opencv读取的图像格式是[b,g,r],剩下的就是按公式写代码了。

# -*- coding: utf-8 -*-
# 提供图像处理辅助函数,色彩空间转换
# @Author  : BQH
# @File    : tools.py
# @Date    : 2018-11-07import numpy as np
import cv2# region 辅助函数
# RGB2XYZ空间的系数矩阵
M = np.array([[0.412453, 0.357580, 0.180423],[0.212671, 0.715160, 0.072169],[0.019334, 0.119193, 0.950227]])# im_channel取值范围:[0,1]
def f(im_channel):return np.power(im_channel, 1 / 3) if im_channel > 0.008856 else 7.787 * im_channel + 0.137931def anti_f(im_channel):return np.power(im_channel, 3) if im_channel > 0.206893 else (im_channel - 0.137931) / 7.787
# endregion# region RGB 转 Lab
# 像素值RGB转XYZ空间,pixel格式:(B,G,R)
# 返回XYZ空间下的值
def __rgb2xyz__(pixel):b, g, r = pixel[0], pixel[1], pixel[2]rgb = np.array([r, g, b])# rgb = rgb / 255.0# RGB = np.array([gamma(c) for c in rgb])XYZ = np.dot(M, rgb.T)XYZ = XYZ / 255.0return (XYZ[0] / 0.95047, XYZ[1] / 1.0, XYZ[2] / 1.08883)def __xyz2lab__(xyz):"""XYZ空间转Lab空间:param xyz: 像素xyz空间下的值:return: 返回Lab空间下的值"""F_XYZ = [f(x) for x in xyz]L = 116 * F_XYZ[1] - 16 if xyz[1] > 0.008856 else 903.3 * xyz[1]a = 500 * (F_XYZ[0] - F_XYZ[1])b = 200 * (F_XYZ[1] - F_XYZ[2])return (L, a, b)def RGB2Lab(pixel):"""RGB空间转Lab空间:param pixel: RGB空间像素值,格式:[G,B,R]:return: 返回Lab空间下的值"""xyz = __rgb2xyz__(pixel)Lab = __xyz2lab__(xyz)return Lab# endregion# region Lab 转 RGB
def __lab2xyz__(Lab):fY = (Lab[0] + 16.0) / 116.0fX = Lab[1] / 500.0 + fYfZ = fY - Lab[2] / 200.0x = anti_f(fX)y = anti_f(fY)z = anti_f(fZ)x = x * 0.95047y = y * 1.0z = z * 1.0883return (x, y, z)def __xyz2rgb(xyz):xyz = np.array(xyz)xyz = xyz * 255rgb = np.dot(np.linalg.inv(M), xyz.T)# rgb = rgb * 255rgb = np.uint8(np.clip(rgb, 0, 255))return rgbdef Lab2RGB(Lab):xyz = __lab2xyz__(Lab)rgb = __xyz2rgb(xyz)return rgb
# endregionif __name__ == '__main__':img = cv2.imread(r'E:\code\collor_recorrect\test_1.jpg')w = img.shape[0]h = img.shape[1]img_new = np.zeros((w,h,3))lab = np.zeros((w,h,3))for i in range(w):for j in range(h):Lab = RGB2Lab(img[i,j])lab[i, j] = (Lab[0], Lab[1], Lab[2])for i in range(w):for j in range(h):rgb = Lab2RGB(lab[i,j])img_new[i, j] = (rgb[2], rgb[1], rgb[0])cv2.imwrite(r'E:\code\collor_recorrect\test.jpg', img_new)

Python实现RGB和Lab颜色空间互转相关推荐

  1. Python实现RGB转Lab颜色空间,PS:和PhotoShop转换结果一样

    由于工作要求,需要把rgb颜色转成Lab颜色空间.网上一搜一大把的代码,但是和PS一对比,基本上都不对. 下面这张图是OpenCV官方文档的计算方法. 用Python实现代码如下: from math ...

  2. RGB与Lab颜色空间互相转换

    RGB与Lab颜色空间互相转换 1.Lab颜色空间 同RGB颜色空间相比(见博客<光与色的故事--颜色空间浅析>),Lab是一种不常用的色彩空间.它是在1931年国际照明委员会(CIE)制 ...

  3. RGB与Lab颜色空间互相转换 持续更新中

    RGB与Lab颜色空间互相转换 1.Lab颜色空间 同RGB颜色空间相比(见博客<光与色的故事–颜色空间浅析>),Lab是一种不常用的色彩空间.它是在1931年国际照明委员会(CIE)制定 ...

  4. RGB与LAB优化互转

    转自博客:http://blog.csdn.net/shamaozi/article/details/6221029 虽然若干年前就看过了关于色彩空间的介绍,但是直到今天才自己动手写代码做这件事情.虽 ...

  5. 【Pytorch】rgb转lab颜色空间转换

    最近有需要,自己按照opencv实现的方式,自测! 个别tensor,numpy互转参考:https://oldpan.me/archives/pytorch-tensor-image-transfo ...

  6. 用c++实现颜色空间rgb,grey,luv和lab的互转

    1 rgb转grey,rgb转luv,rgb转lab 1. 1 rgb转grey void RgbToGrey(unsigned char *rgb, double *grey) { double R ...

  7. MATLAB 将RGB颜色空间转为HSI颜色空间、LAB颜色空间 原理及程序

    一张彩色图像是由R.G.B三个通道组成,所以首先需要将彩色图像分为三个通道的图像. 以下是对猫图进行单通道提取得到的图像. HSI颜色空间 HSI[Hue-Saturation-Intensity(L ...

  8. RGB、HSV和Lab颜色空间

    https://blog.csdn.net/fred_yang2013/article/details/11083691 http://blog.csdn.net/carson2005/article ...

  9. RGB、Lab等颜色空间的区别

    RGB颜色空间 RGB颜色是红色(Red).绿色(Green)和蓝色(Blue)三基色的字母缩写.RGB色彩模式是通过三种基本颜色的不同程度的迭加来产生各种各样的不同颜色.这个标准能够涵盖人类视力所能 ...

最新文章

  1. 【重磅上线】思维导图工具XMind:ZEN基础问题详解合集
  2. 【Java架构:持续交付】一篇文章搞掂:持续交付理论
  3. C++ 输入字符串和string 类型总结
  4. PHP ERROR_php中的异常和错误浅析
  5. 官方回应 ,清华大学对于造假的处理结果来了:一作撤销博士学位,导师停止招生资格及提前退休...
  6. 直方图均衡[附C实现代码]
  7. 底层主播生存录:玩不好算法,去不了塔尖
  8. java : NoSuchMethodError: org.codehaus.jackson.JsonNode.asInt()
  9. Centeros常用命令
  10. python批量保存网页为pdf_在chrome中自动打印/保存网页为pdf - python 3.6
  11. MTPA仿真实现和一些比较
  12. 文件mime类型大全
  13. 又一GameFi黑马问世,12.22日开启全球IDO
  14. 修真院教学模式四大体系之职业素养
  15. 国外著名大学的开放资源
  16. unity种四种光源
  17. 因果是宇宙的规律_huadingjin_新浪博客
  18. 数据库 2.关系模型
  19. 【转】c#怎么连接数据库 用MySQL 详解
  20. ECharts:免费,开源,超炫的可视化作品

热门文章

  1. C宏定义中## 和# 的含义
  2. c语言基本类型学习小结
  3. Ubuntu 11.10中用xen-tools安装虚拟机(UbuntuCentOS)
  4. when ajax,jQuery.when()
  5. 可延迟函数、内核微线程以及工作队列
  6. python编辑svg文件_SVG 文本
  7. windows安装包安装mysql5.7_Windows7 64位压缩包安装MySQL5.7.9
  8. mysql受影响的行: 0_mysql执行update语句受影响行数是0
  9. 微型计算机48MHz辐射超,2012职称计算机考试题理论题库
  10. php 实现 pacs 系统,影像管理系统(PACS)