01 引言
一切看似复杂的计算机视觉项目,其基础都会回归到单张图片上。能够理解 灰度/彩色图像 的基本原理并将代码用于实际案例是本文的目标。下文将详细介绍如何利用 Python 实现 灰度/彩色图像 的基本处理,主要分为两个部分:
- 详细原理介绍
- Python 代码实战
本文数据代码可以在后台回复「灰度图像」获取
02 原理介绍
计算机实际上是怎么”看“图像数据的呢?图像只是三维现实场景的二维表示,比如现实中的一辆汽车是三维物体,但如果你给汽车拍张照片,我们就得到了它的二维图像。
这张图像包含的信息有:汽车的颜色、形状、随照明条件不同而不同的阴影,以及表观大小(随摄影距离的远近,物体表现得更大还是更小)这是计算机“看”图的第一步。

接下来,我们还要将数字图像打散,使之成为一个由色彩和强度小单元组成的网络,也就是我们常说的像素。
因为在我们编写程序来处理并判读图像的过程中,这个网格至关重要。(直接读入一整张图片对于目前的计算机技术来说还是太难了,所以得拆分成像素网格)
2.1 像素网络
我们先来看灰度图像,这样避免了彩色带来的复杂性。放大图片中的某一小部分,会发现它是一个二维网络值,亦被称之为具有宽度和高度的数组(单个颜色强度很小的单位)

这个网格中每个像素颜色都有一个对应的数值,每个像素的值范围是0~255。0 表示黑色 255 表示白色,我们可以通过定位像素网格的横纵坐标来获取某一特定位置的像素值。

2.2 彩色图像
毋庸置疑,彩色图像比灰度图像拥有更多的信息,但维度也高了一层。灰度图像是只有长和宽的二维,而彩色图像是三维的。
彩色图像被解析为具有宽高和深的三维立方体。深是指颜色通道的数量:大多数彩色图像可以仅通过三种颜色组合来表示,即红绿蓝(red,green,blue;组合起来便是我们经常见到的 rgb)

可以将深度看做三个堆叠的二维色彩图层堆叠到一起形成的完整的彩色图像。蓝,绿,红色各一层。
问:灰度图像网格处理已经够用大多数场景了,为什么还需要彩色图像?
答:彩色图像虽然带来了不必要的复杂性且占用了更多的内存空间,但也不能一棒子打死,在某些分类任务中,彩色图像会非常有用。比如对下图的交通道路线(灰色图像)进行分类,该如何区分黄白线呢?

尽管能够勉强猜出虚线大概率是白色,毕竟深一点。但这样的分类方法实在太过草率,如果再加上角度不一的日照,雨雪等天气,那就更无从下手了。这样一来,直接看彩色图像是不是就舒服多了

通常在计算机视觉应用中,识别车道线,汽车或行人时,可以通过人眼的观察习惯来判断颜色信息和彩色图像是否有用。如果对人眼来说,彩色图像识别起来更轻松,那么彩色图像对算法来说也更轻松些。一言以蔽之,如果色彩的存在对最终的结果非常有帮助,那就用吧!
03 代码实战
本次代码实战将包含以下知识点:
- 彩色图片的读入(cv2 库与matplotlib 库两种方式)
- 彩色图像转灰度图像
- 通过位置访问单个像素
import numpy as np
import matplotlib.image as mpimg # matplotlib中读取图片
import matplotlib.pyplot as plt
import cv2 # 计算机视

本文介绍了如何使用Python进行图像处理,包括通过matplotlib和cv2库读取彩色图像,转换为灰度图像,以及访问单个像素值。通过理解图像的像素网络和颜色通道,阐述了为何在某些场景下需要彩色图像。代码实战部分展示了具体的转换步骤,并通过实例解释了灰度图像和彩色图像在识别任务中的差异。

1333

被折叠的 条评论
为什么被折叠?



