以前学python-opencv的时候记录了很多非常基础的资料,为了防止自己不小心把资料弄丢,趁现在还没开学赶紧开始搬运。
图像的基本要素
- 高度(height)
- 宽度(width)
- 深度(depth)
- 通道数(channels)
- 颜色格式
高度与宽度
由图像的像素数量和分配决定:如 300X400 的一张图像,高度为 300 像素,宽度为 400 像
素,总像素数量 120,000
深度
存储每个像素所用的位数,也用于量度图像的色彩分辨率。比如一幅单色图像,若每个像素
有 8 位,则最大灰度数为 2 的 8 次方即 256(从纯黑到纯白分为 255 阶),总共能表示 256
种颜色。
假设一幅彩色图像RGB3个分量的像素位数分别为8,8,8,则最大颜色数目为2的3X8次方,
即 16777216,就是说像素的深度为 24 位,每个像素可以是 16777216 种颜色中的一种。
通过图像的宽度、高度、深度,能够求出图像的大小为:
图
像
大
小
(
B
y
t
e
)
=
h
e
i
g
h
t
×
w
i
d
t
h
×
d
e
p
t
h
8
图像大小(Byte)=\frac{height \times width \times depth}{8}
图像大小(Byte)=8height×width×depth
(如一张 100×100,深度为 16 位的图像,其大小为 20,000 Byte,约等于 19.5KB)
注意位到字节的转换,8 bit = 1 Byte
通道数
灰度图(GRAY)的通道数为 1,大多数彩色图像(如 HSV,BGR)的通道数为 3,小部分彩色
图像的通道数为 4(如 CMYK)
颜色格式
- GRAY 格式:单通道图像,一个像素用一个灰度通道来表示
- BGR 格式: 三通道图像,一个像素用三个通道来描述(分别为蓝、绿、红)
- HSV 格式: 三通道图像,一个像素用三个通道表示(分别为色相、饱和度、亮度)
- CMYK 格式:四通道图像,一个像素用四个通道表示(分别为青、品红、黄、黑)
生成随机图像
以下是需要用到的模块,没有安装的话
sudo pip install numpy
sudo pip install opencv-python
import numpy as np
import cv2
利用 numpy 模块来产生数组,利用 cv2 将数组转换成图像
建立一个二维数组,大小 3x3,赋值为 0
img = np.zeros((3,3),dtype=np.uint8)
print(img)
此时的打印结果如下:
[[0 0 0]
[0 0 0]
[0 0 0]]
img 数组中储存的是九个像素的值,这些值均为 0,若将其保存为图像,则将显示黑色。
之后进行如下操作:
img = cv2.cvtColor(img, cv2.COLOR_GRAY2BGR)
同样,通过 print 函数输出,输出得:
[[[0 0 0]
[0 0 0]
[0 0 0]]
[[0 0 0]
[0 0 0]
[0 0 0]]
[[0 0 0]
[0 0 0]
[0 0 0]]]
可以看到,数组中多出了两个通道,从上到下依次为 B 通道,G 通道和 R 通道的值。如果保
存这张图片,他们的颜色同样会是黑色。
可以编写如下代码:
import numpy as np
import cv2
import os
random = bytearray(os.urandom(900))
flat = np.array(random)
gray = flat.reshape(30,30)
cv2.imshow("gray",gray)
bgr = flat.reshape(10,30,3)
cv2.imshow("bgr",bgr)
这段代码先生成了九百个随机字节,之后利用 shape 和 reshape 来对图像的大小进行限制。
(注意:形状的总大小要与字节数一致,字节数 = 宽度 X 高度 X 通道数)
gray 和 bgr的输出如下图所示