20180713:pyimageresearch的DeepLearning for ComputerVision电子书阅读笔记。
封面Chapter 3: Image Fundamentals图像基础
图像主要的数据是像素,这里会介绍如何通过NumPy
库读取图像的像素数据。
图像的像素一般来说有两种表现形式:
- 灰度/单通道
- 彩色
在一张灰度图像中,像素值都在0~255之间。0代表黑色,255代表白色。
灰度图对应像素值分布
彩色图一般使用RGB色彩空间,也就是拥有红色,绿色,蓝色三个通道。三个通道,每个通道的范围是0~255,所以所有的颜色可能就是:255 x 255 x 255 = 16777216,一千六百万色。
图像还可能含有深度信息,也就是所谓的RGBD图像,那么图像就有了四个通道。从程序的角度,可以使用3D NumPy
表示含有四个通道的深度图。
图像上的坐标系,图像左上角的像素点有[0. 0],向下方向Y增加,向右方向X增加。读取像素的时候会遇到类似于C#程序中List<string> lstStr
的问题,假设有20个像素,那么取值时候是0~19,整个有20个。如果直接取第20个像素,程序会报错。
接下来文中介绍了如何访问图像的像素,我使用了Anaconda来创建一个虚拟环境,并且安装opencv。安装步骤非常简单,直接搜索opencv,点击apply即可。
Anaconda安装opencv接下来贴上文中简单的读取本地图像的python代码:
import cv2
image = cv2.imread("D:/CV_data/TEST/1.jpg")
print(image.shape)
cv2.imshow("img",image)
cv2.waitKey(0)
这里需要注意的是图像路径问题,在windows上需要使用绝对路径/
。直接从文件管理器粘贴的路径需要修改分隔符的方向或者写成下面的格式。
image = cv2.imread("D:\\CV_data\\TEST\\1.jpg")
使用NumPy读取图像像素时候要注意x和y的先后顺序,一般我们定义的二维点为(x, y),但是这里的顺序是(y, x)
import cv2
image = cv2.imread("D:\\CV_data\\TEST\\1.jpg")
(b, g, r) = image[20, 100] # accesses pixel at x=100, y=20
print(image.shape)
cv2.imshow("img",image)
cv2.waitKey(0)
这一章节的最后涉及一些图像尺度变换的问题,关于是否保留图像原有比例的问题,而且作者陈述是否保留图片原本的ratio没有定论,需要视深度学习的情况而定。
网友评论