[计算机视觉基础] OpenCV_2 Read Image and Video

无论是对图像或者是对视频的简单亦或是复杂的处理,我们都需要将图片和视频转化为代码能够“明白”的格式,而在 OpenCV-Python 中,这就是 Numpy 的 Matrix。本篇文章主要介绍如何通过 OpenCV-Python 加载并显示图片以及视频,这是日后处理图片以及视频的基础。

视频和图片的关系

介绍视频离不开图片。不知小时候你是否在书本的空白处画一些图案,如果你以某一速率以上翻动书本,图案仿佛变成了一段“动画”。由于人眼识别的频率有限,故而当在单位时间内看到的图像数目超过一定的数目,给人眼造成的感觉就是画面是运动的,这时图片的连续播放便形成了视频。这个频率一般为25张图片/秒以上,我们经常听到的帧率即为每秒播放的图片的个数。可以这么说:视频是由图片组成,是以一定速率进行连续播放的行为在肉眼下形成的视觉效果。当然,提供一个视频,也可以通过一定的方法获得其组织而成的图片,进而对其进行处理。

Read Image

Show you the code firstly:

import cv2 as cv
img = cv.imread("./flower.jpeg")
print(img.shape) # (366, 650, 3)
cv.imshow("img", img)
cv.waitKey(0)

cv.imread(filename, flags=None)
读取指定支持类型的本地图片类型的文件,返回 Numpy.ndarray 类型的数组,这里因为有BGR三个通道,所以 shape 为 (366, 650, 3)。
filename:支持 absolutle or relative,4.5.3 支持的图片类型如下:

    .   -   Windows bitmaps - \*.bmp, \*.dib
    .   -   JPEG files - \*.jpeg, \*.jpg, \*.jpe
    .   -   JPEG 2000 files - \*.jp2
    .   -   Portable Network Graphics - \*.png
    .   -   WebP - \*.webp
    .   -   Portable image format - \*.pbm, \*.pgm, \*.ppm \*.pxm, \*.pnm 
    .   -   PFM files - \*.pfm
    .   -   Sun rasters - \*.sr, \*.ras
    .   -   TIFF files - \*.tiff, \*.tif
    .   -   OpenEXR Image files - \*.exr
    .   -   Radiance HDR - \*.hdr, \*.pic
    .   -   Raster and Vector geospatial data supported by GDAL

flags:读取文件时可追加的操作:

enum ImreadModes
{
    IMREAD_UNCHANGED           = -1,
    IMREAD_GRAYSCALE           = 0,
    IMREAD_COLOR               = 1,
    IMREAD_ANYDEPTH            = 2,
    IMREAD_ANYCOLOR            = 4,
    IMREAD_LOAD_GDAL           = 8,
    IMREAD_REDUCED_GRAYSCALE_2 = 16,
    IMREAD_REDUCED_COLOR_2     = 17,
    IMREAD_REDUCED_GRAYSCALE_4 = 32,
    IMREAD_REDUCED_COLOR_4     = 33,
    IMREAD_REDUCED_GRAYSCALE_8 = 64,
    IMREAD_REDUCED_COLOR_8     = 65,
    IMREAD_IGNORE_ORIENTATION  = 128,
};

默认为 IMREAD_UNCHANGED,即不做改变,常用的例如 IMREAD_GRAYSCALE 是以灰度强度读取图片,这样读取出的图片是只有灰度值,即肉眼所见的黑白。例如:

import cv2 as cv

img = cv.imread("./flower.jpeg", cv.IMREAD_GRAYSCALE)
print(img.shape) # (366, 650)
cv.imshow("img", img)
cv.waitKey(0)

彩色图片变为了黑白


image.png

这里可以简单介绍下一张彩色的图片是如何变为黑白的,这里涉及到 Color Space 的相关概念。灰度图的优点是数据量更小,处理起来速度更快。我们以RGB模式的图片转灰度图片为例。由于RGB模式的图片拥有三个通道,而灰度只是从黑色到白色的一维数值,所以程序需要借助每个像素的 RGB 三个通道的强度值计算出一个灰度值,比较好的算法是通过给与 R、G、B 对应的权重,通过加权和计算出一个灰度值。这里的权重主要是根据人肉眼对于 R、G、B三种颜色的敏感程度(G > R > B),基本公式如下:


image.png

cv.imshow(winname, mat)
在一个特殊的窗口上显示一张图片
winname:窗口的标题名称
mat:图片的矩阵表达

cv.waitKey(delay=None)
等待系统按键事件,如果 delay 为 0 则一直等待。返回值为按键的码值。

Read Video

Show you the code firstly:

import cv2 as cv
capture = cv.VideoCapture("./Videos/dog.mp4")

while True:
    isSuccess, frame = capture.read()
    if not isSuccess:
        break

    cv.imshow("", frame)
    if cv.waitKey(20) & 0xFF == ord('s'):
        break

capture.release()
cv.destroyAllWindows()

cv.VideoCapture()
视频处理对象构造方法,可以传入的包括:

  • 视频文件
  • 图像设备(0、1、2等)
  • 视频流
    对于图像设备,主要取决于机器一共接入了多少个可以被识别为 Capture device 的设备(webcam,摄像头等),0、1、2代表系统为之设置的编号。

isSuccess, frame = capture.read()
抓取、解码并返回下一帧的图像数据,返回值格式与 cv.imread 相同。这里的循环其实就是逐帧的处理每一张图片(上面有说道视频是由图片以一定的帧率连续播放的效果)。如果抓取到最后一张图片或者图片格式错误,则 isSuccess 为 False,frame 为空。

capture.release()
关闭视频文件或者图像设备,底层也会释放申请的内存空间。

cv.destroyAllWindows()
销毁所有打开的顶层UI窗口

值得注意的是,cv.waitKey(20) 决定了视频展示的帧率,即此时为 20ms的间隔展示图片,所以忽略中间的处理时延视频帧率为 1 / 0.02 = 50 HZ。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,951评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,606评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,601评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,478评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,565评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,587评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,590评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,337评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,785评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,096评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,273评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,935评论 5 339
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,578评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,199评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,440评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,163评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,133评论 2 352

推荐阅读更多精彩内容