logo

【Python】【 OpenCV】视频帧和摄像头帧操作 and 窗口显示


风晓
风晓 2023-12-29 10:53:19 20344 赞同 0 反对 0
分类: 资源 标签: AI大模型
这一章主要讲怎么操作

一、读取写入视频文件

复制代码
 1 import cv2
 2 
 3 # 创建一个视屏捕获对象
 4 videoCapture = cv2.VideoCapture('AVI.avi')
 5 
 6 # 获取视频的属性值,cv2.CAP_PROP_FPS获取视频帧率
 7 fps = videoCapture.get(cv2.CAP_PROP_FPS)
 8 
 9 # cv2.CAP_PROP_FRAME_WIDTH/HEIGHT 返回float类型 获取视频帧的宽高
10 size = int(videoCapture.get(cv2.CAP_PROP_FRAME_WIDTH)), \
11        int(videoCapture.get(cv2.CAP_PROP_FRAME_HEIGHT))
12 
13 '''
14 创建一个写入对象,将帧写入输出的视频
15 cv2.VideoWriter_fourcc()函数指定编码器为 I420
16 fps 和 size 指定输出的帧率和尺寸
17 '''
18 videoWrite = cv2.VideoWriter('Out.avi',
19                              cv2.VideoWriter_fourcc('I', '4', '2', '0'),
20                              fps, size
21                              )
22 
23 '''
24 对捕获到的视频对象进行读取帧,success表示是否成功读取一帧,frame表示当前帧。
25 循环读取写入输出视频。
26 '''
27 success, frame = videoCapture.read()
28 while success:
29        videoWrite.write(frame)
30        success, frame = videoCapture.read()
复制代码

 

二、捕获摄像头帧

复制代码
 1 import cv2
 2 
 3 cameraCapture = cv2.VideoCapture(0)
 4 
 5 fps = 30
 6 
 7 size = int(cameraCapture.get(cv2.CAP_PROP_FRAME_WIDTH)), \
 8         int(cameraCapture.get(cv2.CAP_PROP_FRAME_HEIGHT))
 9 
10 videoWriter = cv2.VideoWriter(
11     'OutVideo_GRAB.avi',
12     cv2.VideoWriter_fourcc('I', '4', '2', '0'),
13     fps,
14     size
15 )
16 
17 success, frame = cameraCapture.read()
18 
19 numFramesRemaining = 10 * fps
20 while success and numFramesRemaining > 0:
21     videoWriter.write(frame)
22     success, frame = cameraCapture.read()
23     numFramesRemaining -= 1
复制代码

和视频的读取写入没有什么差异,都是需要先创建一个VideoCapture Object来操作,下述是细微差别:

3   Line:VideoCapture(0),其中 0 代表设备,还可以1,2,3 分别代表不同的摄像头(如果存在),也可以输入网络摄像头,直接替换成URL即可

5   Line:需要手动设置fps的值

19 Line:需要设定一个时间,numFramesRemaining代表持续捕获300个帧,而每30个帧为一秒,所以将生成一个10秒钟的视频文件

 

三、窗口显示图片

复制代码
1 import cv2
2 
3 img = cv2.imread('CopyPic.png')
4 cv2.imshow('', img)
5 cv2.waitKey()
6 cv2.destroyAllWindows()
复制代码

 

 

四、窗口显示摄像头

复制代码
 1 import cv2
 2 
 3 # 检测窗口是否被点击
 4 clicked = False
 5 
 6 
 7 # 定义鼠标事件处理函数
 8 def onMouse(event: int, x, y, flags, param):
 9     global clicked
10     if event == cv2.EVENT_LBUTTONUP:
11         clicked = True
12 
13 
14 # 创建一个视频对象
15 cameraCapture = cv2.VideoCapture(0)
16 # 定义窗口命
17 cv2.namedWindow('Camera')
18 # 将鼠标回调函数,将鼠标事件处理函数和窗口关联起来
19 cv2.setMouseCallback('Camera', onMouse)
20 
21 print('Showing camera feed. Click window or press any key to stop.')
22 # 获取当前时间的摄像头帧
23 success, frame = cameraCapture.read()
24 
25 # 循环获取当前时间的摄像头帧,当按下任意按键 or 点击鼠标时则停止显示
26 while success and cv2.waitKey(1) == -1 and not clicked:
27     cv2.imshow('Camera', frame)
28     success, frame = cameraCapture.read()
29 
30 # 关闭窗口
31 cv2.destroyAllWindows()
32 
33 # 释放摄像头资源
34 cameraCapture.release()
复制代码

 

针对多摄像头,我们需要先探明摄像头的设备号:

复制代码
 1 import cv2
 2 
 3 for item in range(10):
 4     # 创建一个object
 5     camera = cv2.VideoCapture(item)
 6 
 7     # 查询此摄像头是否能打开,如果不能则跳过,并输出一条 Error Message
 8     if not camera.isOpened():
 9         print(f"Can\'t open camera {item}")
10         continue
11 
12     # 读取摄像头帧率
13     while True:
14         success, frame = camera.read()
15         # 当摄像头帧读取失败则跳过
16         if not success:
17             break
18 
19         cv2.imshow(f'Camera device number: {item}', frame)
20 
21         # 等待1毫秒,检查用户是否有键盘输入‘q’
22         if cv2.waitKey(1) == ord('q'):
23             break
24 
25     camera.release()
26     cv2.destroyAllWindows()
复制代码

如果您发现该资源为电子书等存在侵权的资源或对该资源描述不正确等,可点击“私信”按钮向作者进行反馈;如作者无回复可进行平台仲裁,我们会在第一时间进行处理!

评价 0 条
风晓
粉丝 1 资源 2038 + 关注 私信
最近热门资源
当“ventoy启动盘”遇到“主板安全启动”  404
最近下载排行榜
当“ventoy启动盘”遇到“主板安全启动” 0
作者收入月榜
1

prtyaa 收益354.19元

2

风晓 收益207.84元

3

IT-feng 收益197.65元

4

zlj141319 收益173.23元

5

777 收益169.89元

6

1843880570 收益160.33元

7

信创来了 收益103.8元

8

Fhawking 收益99.6元

9

克里斯蒂亚诺诺 收益91.08元

10

技术-小陈 收益79元

请使用微信扫码