当前位置: 首页 > article >正文

【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色彩空间则更适用于需要精确颜色匹配的场景。
转换与映射:在实际应用中,常常需要在不同的色彩空间之间进行转换和映射。这通常涉及到复杂的数学计算和算法优化。
综上所述,色彩空间是描述颜色的重要工具,不同的色彩空间具有各自的特点和应用场景。在选择和使用色彩空间时,需要根据具体的需求和条件进行权衡和选择。

七、色彩空间参数

色彩范围参数取值范围
RGBR(红)0-255
G(绿)0-255
B(蓝)0-255
HSVH(色调)0°-360°
S(饱和度)0%-100%
V(亮度/明度)0%-100%
CMYC(青色)0%-100%
M(品红)0%-100%
Y(黄色)0%-100%
CMYKC(青色)0%-100%
M(品红)0%-100%
Y(黄色)0%-100%
K(黑色)0%-100%
YCbCrY(亮度)0-255
Cb(蓝色色度)0-255
Cr(红色色度)0-255
HISH(色调)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)
#查看原图像数组维度,输出结果为(7505003)
#是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()


http://www.kler.cn/a/411104.html

相关文章:

  • 《基于FPGA的便携式PWM方波信号发生器》论文分析(三)——数码管稳定显示与系统调试
  • 从零开始学GeoServer源码(二)添加支持arcgis切片功能
  • Spring源码(十三):Spring全系列总结
  • vxe-modal VxeUI 窗口组件弹窗多窗口模式
  • 簡單易懂:如何在Windows系統中修改IP地址?
  • vue 预览pdf 【@sunsetglow/vue-pdf-viewer】开箱即用,无需开发
  • TailwindCss 总结
  • 【纪念365天】我的创作纪念日
  • CDAF / PDAF 原理 | PDAF、CDAF 和 LAAF 对比 | 图像清晰度评价指标
  • 【Linux系统】—— 基本指令(四)
  • Kotlin DSL Gradle 指南
  • MYSQL 表的增删改查(上)
  • qt ubuntu i386 系统
  • 【MySQL系列】通过创建新表备份`password`字段
  • c++:面向对象三大特性--继承
  • 数据结构 【二叉树(上)】
  • c++学习:json库例子
  • Spark SQL大数据分析快速上手-Hive安装
  • 【设计模式】【行为型模式(Behavioral Patterns)】之命令模式(Command Pattern)
  • Vue进阶面试题(三)
  • Python和R统计检验比较各组之间的免疫浸润
  • 【IEEE出版 | ISBN: 979-8-3315-0796-1 | 高录用稳检索】 2025神经网络与智能优化国际研讨会(NNIO 2025)
  • 中国科学院大学研究生学术英语读写教程 Unit6 Biology TextA 原文和翻译
  • 对于公平与效率的关系问题,材料中有两种不同倾向性的观点,请对这两种观点分别加以概述并谈谈你的看法。字数不超过500字。
  • 上海乐鑫科技一级代理商飞睿科技,ESP32-C61高性价比WiFi6芯片高性能、大容量
  • 鸿蒙应用的基本架构