计算机视觉PyTorch实现图像着色 - (一)

简介: 计算机视觉PyTorch实现图像着色 - (一)

在介绍图像着色原理之前,先介绍一下opencv的颜色空间


目前基于opencv实现图像原理中定义的颜色空间分为三种:


RGB


RGB就是常说的光学三原色,R代表Red(红色),G代表Green(绿色),B代表Blue(蓝色),取值范围在[0,255]。自然界中肉眼所能看到的任何色彩都可以由这三种色彩混合叠加而成,因此也称为加色模式。

c2fc1dc9f22146fc889b2cc4fc0b11bf.png

import cv2
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['Arial Unicode MS']
plt.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的问题
image='color.jpg'
img=cv2.imread(image,cv2.IMREAD_COLOR)
b,g,r=cv2.split(img)
img2=cv2.merge([r,g,b])
img_b=img[:,:,0]
img_g=img[:,:,1]
img_r=img[:,:,2]
plt.figure(figsize=(12,8))
plt.subplot(2,2,1)
plt.imshow(img2)
plt.title('原始图像')
plt.axis('off')
plt.subplot(2,2,2)
plt.imshow(img_b)
plt.title("B")
plt.axis('off')
plt.subplot(2,2,3)
plt.imshow(img_g)
plt.title("G")
plt.axis('off')
plt.subplot(2,2,4)
plt.imshow(img_r)
plt.title("R")
plt.axis('off')
plt.show()

4af18eb7c3aa40f099c0aad585299fec.png


为了解决matplotlib中文乱码问题


#window
plt.rcParams['font.sans-serif'] = ['KaiTi'] # 指定默认字体
#mac
plt.rcParams['font.sans-serif'] = ['Arial Unicode MS'] # 指定默认字体
plt.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的问题


opencv读取图片是BGR格式,matplotlib展示要RGB格式,所以需要对图像进行通道转换


HSV


色调H:用角度度量,取值范围为0°~360°,从红色开始按逆时针方向计算,红色为0°,绿色为120°,蓝色为240°。它们的补色是:黄色为60°,青色为180°,紫色为300°;

饱和度S:饱和度S表示颜色接近光谱色的程度。一种颜色,可以看成是某种光谱色与白色混合的结果。其中光谱色所占的比例愈大,颜色接近光谱色的程度就愈高,颜色的饱和度也就愈高。饱和度高,颜色则深而艳。光谱色的白光成分为0,饱和度达到最高。通常取值范围为0%~100%,值越大,颜色越饱和。

明度V:明度表示颜色明亮的程度,对于光源色,明度值与发光体的光亮度有关;对于物体色,此值和物体的透射比或反射比有关。通常取值范围为0%(黑)到100%(白)


ea7a7072b34444a8a73458ef40f5f51a.png

import cv2
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['Arial Unicode MS']
plt.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的问题
image='color.jpg'
img=cv2.imread(image,cv2.IMREAD_COLOR)
b,g,r=cv2.split(img)
img2=cv2.merge([r,g,b])
img_hsv=cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
img_h=img_hsv[:,:,0]
img_s=img_hsv[:,:,1]
img_v=img_hsv[:,:,2]
plt.figure(figsize=(12,8))
plt.subplot(2,2,1)
plt.imshow(img2)
plt.title('原始图像')
plt.axis('off')
plt.subplot(2,2,2)
plt.imshow(img_h)
plt.title("H")
plt.axis('off')
plt.subplot(2,2,3)
plt.imshow(img_s)
plt.title("S")
plt.axis('off')
plt.subplot(2,2,4)
plt.imshow(img_v)
plt.title("V")
plt.axis('off')
plt.show()

c500db6e5e0d426491de437a89307d26.png


Lab

Lab颜色模型由三个要素组成

L:代表亮度,范围在[0,100],0时代表黑色,100时代表白色

a:a包括的颜色是从深绿色(低亮度值)到灰色(中亮度值)再到亮粉红色(高亮度值),范围是从负数变到正数,对应颜色从绿色变到红色,取值[-128,+127],其中值为0时,为灰色。

b :b是从亮蓝色(低亮度值)到灰色(中亮度值)再到黄色(高亮度值),范围是从负数变到正数,对应颜色从蓝色变到黄色,取值[-128,+127],其中值为0时,为灰色。

8247897ec5ca4c91b7f58c93f2513b04.png

import cv2
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['Arial Unicode MS']
plt.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的问题
image='color.jpg'
img=cv2.imread(image,cv2.IMREAD_COLOR)
b,g,r=cv2.split(img)
img2=cv2.merge([r,g,b])
img_lab=cv2.cvtColor(img,cv2.COLOR_BGR2LAB)
img_l=img_lab[:,:,0]
img_a=img_lab[:,:,1]
img_b=img_lab[:,:,2]
plt.figure(figsize=(12,8))
plt.subplot(2,2,1)
plt.imshow(img2)
plt.title('原始图像')
plt.axis('off')
plt.subplot(2,2,2)
plt.imshow(img_l)
plt.title("L")
plt.axis('off')
plt.subplot(2,2,3)
plt.imshow(img_a)
plt.title("A")
plt.axis('off')
plt.subplot(2,2,4)
plt.imshow(img_b)
plt.title("B")
plt.axis('off')
plt.show()

4b7cb42e328a482f8266b90d2b68059e.png


相关文章
|
3天前
|
数据可视化 PyTorch 算法框架/工具
使用PyTorch搭建VGG模型进行图像风格迁移实战(附源码和数据集)
使用PyTorch搭建VGG模型进行图像风格迁移实战(附源码和数据集)
163 1
|
9月前
|
数据采集 PyTorch 数据处理
Pytorch学习笔记(3):图像的预处理(transforms)
Pytorch学习笔记(3):图像的预处理(transforms)
509 1
Pytorch学习笔记(3):图像的预处理(transforms)
|
9月前
|
机器学习/深度学习 人工智能 算法
基于 PyTorch 的图像特征提取
基于 PyTorch 的图像特征提取
|
3天前
|
机器学习/深度学习 自动驾驶 算法
【计算机视觉+自动驾驶】二、多任务深度学习网络并联式、级联式构建详细讲解(图像解释 超详细必看)
【计算机视觉+自动驾驶】二、多任务深度学习网络并联式、级联式构建详细讲解(图像解释 超详细必看)
89 1
|
3天前
|
机器学习/深度学习 数据采集 PyTorch
PyTorch使用神经网络进行手写数字识别实战(附源码,包括损失图像和准确率图像)
PyTorch使用神经网络进行手写数字识别实战(附源码,包括损失图像和准确率图像)
52 0
|
7月前
|
算法 vr&ar 计算机视觉
[笔记]Python计算机视觉编程《二》 基本的图像操作和处理
[笔记]Python计算机视觉编程《二》 基本的图像操作和处理
|
7月前
|
存储 算法 程序员
[笔记]Python计算机视觉编程《一》 基本的图像操作和处理(四)
[笔记]Python计算机视觉编程《一》 基本的图像操作和处理(四)
|
7月前
|
存储 Serverless C语言
[笔记]Python计算机视觉编程《一》 基本的图像操作和处理(三)
[笔记]Python计算机视觉编程《一》 基本的图像操作和处理(三)
|
7月前
|
安全 数据挖掘 计算机视觉
[笔记]Python计算机视觉编程《一》 基本的图像操作和处理(二)
[笔记]Python计算机视觉编程《一》 基本的图像操作和处理(二)
|
7月前
|
XML 算法 计算机视觉
[笔记]Python计算机视觉编程《一》 基本的图像操作和处理(一)
[笔记]Python计算机视觉编程《一》 基本的图像操作和处理