opencv-python 笔记搬运01

opencv-python 笔记搬运01

  • 图像的基本要素
    • 高度与宽度
    • 深度
    • 通道数
    • 颜色格式
  • 生成随机图像

以前学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的输出如下图所示
opencv-python 笔记搬运01_第1张图片
opencv-python 笔记搬运01_第2张图片

你可能感兴趣的:(opencv,python)