物联网
您现在所在的位置:首页>企业动态>物联网

读取图像和视频

编辑:学到牛牛IT培训    发布日期: 2024-01-16 09:17:25  

1、图像处理

在OpenCV中使用vc2.imread()函数读取图像,cv2.imread()有两个参数,第一个参数filename是图片路径,第二个参数flags表示图片读取模式,常用有两种。

cv2.IMREAD_COLOR:加载彩色图片,这个是默认参数,可以直接写1。

cv2.IMREAD_GRAYSCALE:以灰度模式加载图片,可以直接写0。


在OpenCV开发过程中,经常用将RGB图像转换为灰度图像进行操作,因为在灰度图像中更利于检测和操作。在OpenCV的任意阶段,均可以将灰度图与彩色图进行互相转换。

读取灰色图示例如下。

import cv2

img = cv2.imread(“xx.png”, cv2.IMREAD_GRAYSCALE)

或者

import cv2

img = cv2.imread(“xx.png”, 1)


运行结果如图1.1。

1.png

图1.1 灰度图运行结果

1.1 常用属性

img.shape:获取图片的hwc,其中h为图片高度,w为图片宽度,c为图片通道。彩色图像有3个通道,分别为B、G、R;灰度图像只有1个通道,使用shape属性查询后不显示通道个数。

type(img):type()函数用于查看变量类型,所有的图像对象的底层类型是numpy.ndarray类型。

img.size:用于获取图像的像素个数(即:宽 X 高)。

img.dtype:用于查看数据的类型。

cv2.imwrite(dst, img):用于保存图像到指定位置。dst表示存储的路径,img表示图像对象。


2、视频读取

2.1 读取视频或连接摄像头

OpenCV中使用cv2.VideoCapture(str | 0)函数来读取视频,返回值为cv2.VideoCapture类型,如果该函数中的值是str,参数是视频文件路径。如果函数中的值是0,表示打开笔记本的内置摄像头。

视频是由多帧组成,每一帧可以看成一张图像,将图像连接在一起就可以看成一个动态的图像集(即视频)。

示例如下。

video = cv2.VideoCapture("E:/tmp/img/2023711.mp4")

2.2 按帧读取视频

ret, frame = video.read()

video.read()按帧读取视频,ret, frame是获cap.read()方法的两个返回值。 其中ret是布尔值,如果读取帧是正确的则返回True,如果文件读取到结尾,它的返回值就为False。frame就是每一帧的图像,是个三维矩阵。

2.3 等待键盘输入

cv2.waitKey(50)

waitKey()方法本身表示等待键盘输入,参数是50,表示延时50ms切换到下一帧图像。

对于视频而言;参数为0,如cv2.waitKey(0)只显示当前帧图像,相当于视频暂停;参数过大如cv2.waitKey(1000),会因为延时过久而卡顿感觉到卡顿。

v2.waitKey()返回值是键盘输入的ASCII码,esc键对应的ASCII码是27,即当按esc键是if条件句成立。

2.4 显示每一帧图像

cv2.imshow("result", frame)

imshow()函数用于显示图像,result为是窗口的名字(ID),frame是需要显示图像的三维矩阵。

使用video.read()函数循环读取视频,然后使用cv2.imshow()函数循环在同一个窗口中显示,即可以实现视频播放效果。

2.5 释放摄像头

调用video.release()函数用于释放摄像头或视频,调用cv2.destroyAllWindows()关闭所有图像窗口。

2.6 视频读取示例

以下示例用于打开一个视频,并将每一帧图像修改为灰度图像,然后再循环显示出来,实现彩色视频转为黑白视频的效果。

import cv2


# 读取视频文件,参数为0表示打开摄像头

video = cv2.VideoCapture("E:/tmp/img/2023711.mp4")

while True:

    # read()读取当前桢图片,返回两个值,ret用于接收是否成功读取,frame用于接收读取到的当前图像矩阵

    ret, frame = video.read()

    # 如果frame为空,则表示没有图像矩阵,中止循环即可

    if frame is None:

        break

    # 如果当前图像为True,进行图像处理后再显示

    if ret:

        gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

        # 将转换好的图像在result窗口中打开(即下一张会覆盖上一张)

        cv2.imshow("result", gray)


        # 如果键盘输入为Esc键,则结束视频

        # 27表示Esc键,更多字符对应数字见“符号对应数字表”

        # ord()函数用于将字符转为对应数字

key = cv2.waitKey(25)

        if key == 27 or key == ord("q"):

            break


# 释放视频

video.release()

# 销毁所有窗口

cv2.destroyAllWindows()


免费试学
课程好不好,不如实地听一听

封闭学习

2

1

联系我们

电话:028-61775817

邮箱:1572396657@qq.com

地址:成都市金牛区西城国际A座8楼

  • 物联网_物联网专题新闻_物联网IOT资讯-学到牛牛
    物联网_物联网专题新闻_物联网IOT资讯-学到牛牛

    扫一扫,免费咨询

  • 物联网_物联网专题新闻_物联网IOT资讯-学到牛牛
    物联网_物联网专题新闻_物联网IOT资讯-学到牛牛

    微信公众号

  • 物联网_物联网专题新闻_物联网IOT资讯-学到牛牛
物联网_物联网专题新闻_物联网IOT资讯-学到牛牛

学一流技术,找高薪工作

物联网_物联网专题新闻_物联网IOT资讯-学到牛牛

7-24小时服务热线:

028-61775817

版权声明 网站地图

蜀ICP备2021001672号

课程问题轻松问