【python】数据可视化之图像处理
【python】数据可视化之图像处理
- 图像类型
- 一、二值图像
- 二、灰度图像
- 三、索引图像
- 四、RGB图像
- 色彩空间概述
- 一、RGB色彩空间
- 二、HSV色彩空间
- 三、CMY色彩空间
- 四、CMYK色彩空间
- 五、其他色彩空间
- 六、色彩空间的选择与应用
- 七、色彩空间参数
- 常用库介绍
- OpenCV
- Pillow
- Scipy
- 代码示例
本文作业学习笔记而编辑,介绍讲解不够详细,代码大家可以自行复制,运行试试,如果想详细的了解学习,可以去看看其他大神的作品,不喜勿喷。
图像类型
数字图像可以被定义为一个二维列表,列表中元素的索引(x,)就是图像中像素的横纵坐标,元素的值就是该像素的亮度值。例如,在彩色照片中,其像素是由三个色系(红、绿、蓝)组成的,而灰白色照片中其像素只由一个颜色的亮度组成,即它的灰度值。在计算机中,数字图像可按照灰度和颜色的多少分为二值图像、灰度图像、索引图像以及RGB图像,一般的数字图像处理就是针对这4类进行的。
一、二值图像
- 定义:二值图像是仅包含两种灰度级(通常为0和255,分别代表黑色和白色)的图像。
- 特点:图像中的每个像素只能取两个值中的一个,因此处理起来相对简单,数据量也较小。
- 应用:常用于文字识别、图像分割、形态学处理等领域。例如,在OCR(光学字符识别)系统中,二值图像是处理的基础。
二、灰度图像
- 定义:灰度图像是指每个像素只有一个采样颜色的图像。这类图像通常显示为从最暗黑色到最亮的白色的灰度,尽管理论上这个采样可以任何颜色的不同深浅,甚至可以是不同亮度上的不同颜色。灰度图像与黑白图像不同,在计算机图像领域中黑白图像只有黑白两种颜色,灰度图像在黑色与白色之间还有许多级的颜色深度。
- 特点:灰度图像的数据类型一般为8位无符号整数(int8),取值范围通常为[0,255],其中“0”表示纯黑色,“255”表示纯白色,中间的数字从小到大表示由黑到白的过渡色。在某些软件中,灰度图像也可以用双精度数据类型(double)表示,像素的值域为[0,1],0代表黑色,1代表白色,0到1之间的小数表示不同的灰度等级。
- 应用:广泛应用于医学图像处理、图像分割、图像增强等领域。例如,在医学图像处理中,灰度图像常被用于病灶的检测和分析。
三、索引图像
- 定义:索引图像是一种使用颜色表(或称为调色板)的图像。颜色表中的每个条目包含一种颜色,图像中的每个像素通过索引值(指向颜色表中的一个条目)来表示其颜色。
- 特点:索引图像通常用于色彩要求相对简单的图像,如Windows中的壁纸等。由于颜色表的存在,索引图像可以大大节省存储空间。
- 应用:在网页设计中,为了减小图像文件的大小,常使用索引图像格式(如GIF)。
四、RGB图像
- 定义:RGB图像是红(Red)、绿(Green)、蓝(Blue)三种颜色通道的合成图像。每个像素的颜色由这三个通道的强度值决定。
- 特点:RGB图像能够显示丰富的颜色,是计算机中最常用的图像格式之一。每个颜色通道的数据类型一般为8位无符号整数(int8),取值范围为[0,255]。因此,RGB图像可以显示2^24种颜色。
- 应用:广泛应用于摄影、设计、视频处理等领域。例如,在数字摄影中,相机拍摄的图像通常以RGB格式存储。
色彩空间概述
- 定义:色彩空间是色彩学中用于描述颜色的一种方法,它使用一组值(通常使用三个、四个值或者颜色成分)来表示颜色。色彩空间可以是基于物理设备的,如RGB色彩空间,也可以是基于人类视觉感知的,如Lab色彩空间。
- 类型:色彩空间有许多种,常见的有RGB、CMYK、Lab等。每种色彩空间都有其特定的应用场景和优势。
一、RGB色彩空间
- 定义:RGB色彩空间以R(Red:红)、G(Green:绿)、B(Blue:蓝)三种基本色为基础,通过调整这三种颜色的强度来产生各种颜色。
- 原理:RGB色彩空间基于三原色学说,即任何颜色都可以通过红、绿、蓝三种颜色的不同强度组合来生成。
- 应用:RGB色彩空间广泛应用于计算机图形学、显示器、扫描仪等领域。它是现代显示屏的基础色彩空间,能够显示丰富的颜色。
二、HSV色彩空间
- 定义:HSV色彩空间(Hue, Saturation, Value)是一种基于色调、饱和度和亮度的颜色空间。
- 参数:色调(H)表示颜色的种类,取值范围通常是0到360度;饱和度(S)表示颜色的纯度或深浅程度,取值范围通常是0到100%;亮度(V)表示颜色的明暗程度,取值范围通常是0到100%。
- 特点:HSV色彩空间更直观地反映了人眼对颜色的感知,因此在图像处理和设计领域得到广泛应用。
三、CMY色彩空间
- 定义:CMY色彩空间(Cyan, Magenta, Yellow)是一种基于青色、品红色和黄色的颜色空间。这三种颜色分别是红色、绿色和蓝色的补色。
- 原理:CMY色彩空间通过混合青色、品红色和黄色来产生各种颜色。当这三种颜色以最大强度混合时,会产生黑色。
- 应用:CMY色彩空间常用于彩色打印机等设备,因为它与油墨的混合方式相符。
四、CMYK色彩空间
- 定义:CMYK色彩空间(Cyan, Magenta, Yellow, Key)是CMY色彩空间的扩展,它添加了黑色(K)通道。
- 原理:CMYK色彩空间通过混合青色、品红色、黄色和黑色来产生各种颜色。黑色通道的加入提高了色彩的表现力和印刷质量。
- 应用:CMYK色彩空间是印刷行业的标准色彩空间,用于表示印刷品上的颜色。
五、其他色彩空间
- NISC:可能是一个拼写错误或特定领域的术语。在色彩空间的标准术语中,并没有“NISC”这一说法。如果您指的是某种特定的色彩空间或标准,请提供更多的上下文或信息。
- YCbCr:YCbCr是一种色彩空间,它基于YUV色彩空间,但用于数字图像领域。Y表示亮度分量,Cb和Cr表示色度分量。YCbCr色彩空间在视频压缩和传输中得到广泛应用。
- HIS:HIS(Hue, Intensity, Saturation)是一种与HSV类似的色彩空间,但使用亮度(Intensity)替代了HSV中的明度(Value)。HIS色彩空间在图像处理中也有一定的应用。
六、色彩空间的选择与应用
应用场景:不同的色彩空间适用于不同的应用场景。例如,RGB色彩空间适用于计算机图形学和显示设备;CMYK色彩空间适用于印刷行业;Lab色彩空间则更适用于需要精确颜色匹配的场景。
转换与映射:在实际应用中,常常需要在不同的色彩空间之间进行转换和映射。这通常涉及到复杂的数学计算和算法优化。
综上所述,色彩空间是描述颜色的重要工具,不同的色彩空间具有各自的特点和应用场景。在选择和使用色彩空间时,需要根据具体的需求和条件进行权衡和选择。
七、色彩空间参数
色彩范围 | 参数 | 取值范围 |
---|---|---|
RGB | R(红) | 0-255 |
G(绿) | 0-255 | |
B(蓝) | 0-255 | |
HSV | H(色调) | 0°-360° |
S(饱和度) | 0%-100% | |
V(亮度/明度) | 0%-100% | |
CMY | C(青色) | 0%-100% |
M(品红) | 0%-100% | |
Y(黄色) | 0%-100% | |
CMYK | C(青色) | 0%-100% |
M(品红) | 0%-100% | |
Y(黄色) | 0%-100% | |
K(黑色) | 0%-100% | |
YCbCr | Y(亮度) | 0-255 |
Cb(蓝色色度) | 0-255 | |
Cr(红色色度) | 0-255 | |
HIS | H(色调) | 0°-360° |
I(亮度/强度) | 0-1(或归一化为0%-100%) | |
S(饱和度) | 0%-100% |
常用库介绍
OpenCV
链接:OpenCv
简介:OpenCV 是一个开源的计算机视觉和机器学习软件库。它包含了数百种计算机视觉算法,涵盖了图像处理、计算机视觉和机器学习等相关方法,具有 C++、C、Python 和 Java 等多种接口,支持 Windows、Linux、Mac OS、iOS 和 Android 等多个平台。其最初由英特尔开发,现在由 OpenCV 基金会的开发者社区维护.
Pillow
链接:Pillow
简介:Pillow 库是 Python 中一个强大的图像处理库,它基于 Python Imaging Library (PIL) 发展而来,并在其基础上进行了优化和扩展。Pillow 库提供了丰富的图像处理功能,可以处理各种类型的图像文件,并进行图像的编辑、合并、滤镜处理等操作.
Scipy
链接:Scipy
简介:Scipy 是一个基于 Python 开发的用于科学计算的工具集,它建立在 NumPy 之上,提供了许多用于数组操作、数值优化、信号处理等科学计算中常见任务的函数和工具箱。其中的 scipy.ndimage 模块提供了多维图像的处理功能.
代码示例
Pillow读取并显示图像
import numpy
from PIL import Image
import matplotlib.pyplot as plt
hehua=Image.open('he.jpg')
arr = numpy.array(
hehua.getdata(),numpy.uint8).reshape(hehua.size[1],hehua.size[0],3)
plt.imshow(arr)
plt.colorbar()
plt.show()
显示Scipy模块自带图像
import scipy.misc
import matplotlib.pyplot as plt
face = scipy.misc.face()
plt.gray()
plt.imshow(face)
plt.colorbar()
plt.show()
转换为单通道图像
import numpy
from PIL import Image
import matplotlib.pyplot as plt
jiequ = Image.open('he.jpg')
arr = numpy.array(
jiequ.getdata(), numpy.uint8).reshape(jiequ.size[1], jiequ.size[0], 3)
#显示原始图像
plt.subplot(121)
plt.imshow(arr)
#数组切片
arr1 =arr[:,:,0]
#显示单通道图像
plt.subplot(122)
plt.imshow(arr1)
plt.show()
图形截取
import numpy
from PIL import Image
import matplotlib.pyplot as plt
jiequ = Image.open('he.jpg')
arr = numpy.array(
jiequ.getdata(), numpy.uint8).reshape(jiequ.size[1], jiequ.size[0], 3)
plt.subplot(121)
plt.imshow(arr)
arr1=arr[ 0:400,0:450,:]
plt.subplot(122)
plt.imshow(arr1)
#查看原图像数组维度,输出结果为(750,500,3)
#是3通道图像,图像大小为750像素*500像素,高度为750像素,宽度为500 像素
print(arr.shape)
plt.show()
图像垂直翻转(图像水平反转)(同时垂直和水平反转)
import numpy
from PIL import Image
import matplotlib.pyplot as plt
cat = Image.open('he.jpg')
arr = numpy.array(
cat.getdata(), numpy.uint8).reshape(cat.size[1], cat.size[0], 3)
plt.subplot(121)
plt.imshow(arr)
#图像垂直翻转
arrl=arr[ : : -1, :, :]
#图像水平反转
#arrl=arr[ :, : : -1, :]
#同时垂直和水平反转
#arrl=arr[ : : -1,: : -1,:]
plt.subplot(122)
plt.imshow(arrl)
print(arr.shape)
plt.show()
使图像变暗(调节图像亮度)
import numpy
from PIL import Image
import matplotlib.pyplot as plt
cat = Image.open('he.jpg')
arr = numpy.array(
cat.getdata(), numpy.uint8).reshape(cat.size[1],cat.size[0],3)
plt.subplot(221)
plt.imshow(arr)
#调节图像亮度
arrl=arr*0.8
print(type(arrl))
plt.subplot(222)
plt.imshow(arrl.astype('uint8'))
arr2=arr*0.5
print(type(arr2))
plt.subplot(223)
plt.imshow(arr2.astype('uint8'))
arr3=arr*0.3
print(type(arr3))
plt.subplot(224)
plt.imshow(arr3.astype('uint8'))
print(arr.shape)
plt.show()
图像压缩
import numpy as np
from PIL import Image
import matplotlib.pyplot as plt
cat = Image.open('he.jpg')
arr = np.array(
cat.getdata(), np.uint8).reshape(cat.size[1], cat.size[0], 3)
plt.subplot(121)
plt.imshow(arr)
#图像压缩
arr1=arr[::5,::5,:]
plt.subplot(122)
plt.imshow(arr1)
plt.show()