ls -al /dev/ | grep video
如果你用Linux得设备,可能会用到这里来看有没有设备被安全挂载。因为没有一个图形化的页面来方便的查看。
子Linux不是太好使
代码语言:javascript复制# 获取视频帧的宽
w = fcap.get(cv2.CAP_PROP_FRAME_WIDTH)
# 获取视频帧的高
h = fcap.get(cv2.CAP_PROP_FRAME_HEIGHT)
# 获取视频帧的帧率
fps = fcap.get(cv2.CAP_PROP_FPS)
对于一个视频来说,这三个量是必要的。其实有一些视频的设备是返回不来这些个值得
对于我们单帧得读取照片来说接口就是这个样子得
ret就是return得意思,其实这个返回值是可以自己写得
ret只不过是我们约定俗成得而已
该接口会返回两个参数,第一个参数是读取成功与否标志位,成功为True否则为False,第二个参数则为具体的帧数据,其是一个numpy.ndarray的数组。
对于视频流可能会失败得读取一帧,可以写这样得循环来保证读取成功
这里推荐一个路径补全的插件
很方便的自动补全
代码语言:javascript复制import cv2
import numpy
img = cv2.imread('./img/111.jpg', 0)
cv2.imshow('img', img)
cv2.waitKey(1)
注意一定要有后面的waitkey参数,不然一闪而过
代码语言:javascript复制读取图片,第二个参数0是灰色,1是彩色
然后会返回一个负值
cv2.imread()
的函数原型为Mat imread( const string& filename, int flags=1 )
,其中Mat
为Opencv最重要的数据结构,它在Opencv中被定义为一个类,它通过把图像视为一个矩阵来存储数据。
这个是Mat的类型,C 里面的mat类型
在cv2.imread()中,它有两个形参,首先是图像的文件名(索引地址),第二个参数flags用于指定以什么样的格式来读取图像,它的取值有以下几种情况:
(1)flags=1,这也是默认情况,代表选择CV_LOAD_IMAGE_UNCHANGED方式,即采用保持原始格式的方式读取图像。比如待读取的图像原来是灰度图像,读取后还是灰度图像。
(2)flags=2,这种情况代表选择CV_LOAD_IMAGE_GRAYSCALE方式,即以灰度图像格式读取图像。无论原始图像原来是什么格式,读取后都的结果都转变为灰度图像。
(3)flags=3,这种情况代表选择CV_LOAD_IMAGE_COLOR方式,即以BGR格式读取图像。无论原始图像原来是什么格式,读取后都的结果都转变为BGR形式的三通道图像。
我建议是用属性名的写法,不要写这个数字。
对于imshow函数,opencv的官方注释指出:根据图像的深度,imshow函数会自动对其显示灰度值进行缩放,规则如下:
如果图像数据类型是8U(8位无符号),则直接显示。
如果图像数据类型是16U(16位无符号)或32S(32位有符号整数),则imshow函数内部会自动将每个像素值除以256并显示,即将原图像素值的范围由[0~255*256]映射到[0~255]
如果图像数据类型是32F(32位浮点数)或64F(64位浮点数),则imshow函数内部会自动将每个像素值乘以255并显示,即将原图像素值的范围由[0~1]映射到[0~255](注意:原图像素值必须要归一化)
我们尝试看看这个图像的矩阵形式
结果
继续来看看是什么样的数据结构
出现了
读取的图像如果通过numpy.asarray()转换为多维数组类型,即转换后的数组形状为[Height, Width, Channels]。
接下来的文章会继续深入学习cv2.