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

读取图像和视频

编辑:学到牛牛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()


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

推荐阅读

  • 计算机专业的就业难度怎么样?

    国产午夜鲁丝片AV无码蜜臀,福利免费观看午夜体检区,人妻少妇精品无码专区APP,伊人久久大香线蕉成人综合网,国产妓女在线观看视频,亚洲成a人片在线观看尤物,亚洲精品国产一二三无码AV,亚汌国产一区二区三区

  • 嵌入式软件开发学习路线

    国产午夜鲁丝片AV无码蜜臀,福利免费观看午夜体检区,人妻少妇精品无码专区APP,伊人久久大香线蕉成人综合网,国产妓女在线观看视频,亚洲成a人片在线观看尤物,亚洲精品国产一二三无码AV,亚汌国产一区二区三区

  • 为什么自学编程那么难?

    国产午夜鲁丝片AV无码蜜臀,福利免费观看午夜体检区,人妻少妇精品无码专区APP,伊人久久大香线蕉成人综合网,国产妓女在线观看视频,亚洲成a人片在线观看尤物,亚洲精品国产一二三无码AV,亚汌国产一区二区三区

  • IT培训机构出来的到底好不好就业呢?

    国产午夜鲁丝片AV无码蜜臀,福利免费观看午夜体检区,人妻少妇精品无码专区APP,伊人久久大香线蕉成人综合网,国产妓女在线观看视频,亚洲成a人片在线观看尤物,亚洲精品国产一二三无码AV,亚汌国产一区二区三区

封闭学习

2

1

18180749853

蜀ICP备2021001672号

在线咨询 免费试听VIP课程