赞
踩
连接摄像头连接到usb接口,查看dev设备:
# 在终端中输入如下命令,可以查看到camera设备资源:
ls /dev/video*
检查板卡上的camera设备资源示例
也可以使用v4l2命令查看
v4l2-ctl --list-devices
v4l2-ctl --list-devices是一个命令行工具命令,用于列出系统中可用的视频设备列表及其相关信息。它是V4L2(Video for Linux Two)的一部分,用于查看和管理视频设备。
V4L2(Video for Linux Two)是Linux内核中的一个框架,用于支持视频设备的捕捉、显示和编解码等功能。它是Video4Linux的第二个版本。
两个video:
一个是图像/视频采集,一个是metadata采集
安装opencv
pip3 install opencv-python-headless==4.8.0.76
pip3 install opencv-python==4.8.0.76
pip3 install opencv-contrib-python==4.8.0.76
验证是否安装成功
cat@lubancat:~$ python3
Python 3.8.10 (default, Nov 14 2022, 12:59:47)
[GCC 9.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2 as cv
>>> print(cv.__version__)
4.8.0
>>>
-
- import cv2
- import time
-
- # 帧宽和高度
- width = 640
- height = 480
-
- num = 1
-
- # 创建一个VideoCapture对象,并打开系统默认的摄像头(也可以打开视频或者指定的设备)
- cap = cv2.VideoCapture(9)
-
- # 不能打开摄像头
- if not cap.isOpened():
- raise RuntimeError('Could not open camera.')
-
- # 设置帧宽和高度
- cap.set(cv2.CAP_PROP_FRAME_WIDTH, width)
- cap.set(cv2.CAP_PROP_FRAME_HEIGHT, height)
-
- while(cap.isOpened()):
- time.sleep(2)
- # 返回两个参数,ret表示是否正常打开,frame是图像数组,一帧
- ret,frame = cap.read()
-
- # 窗口显示,名为Lubancat_Camera_test
- cv2.imshow("Lubancat_Camera_test", frame)
-
- # 延迟1ms,并根据键盘输入返回值val,是板卡接的键盘
- val = cv2.waitKey(1) & 0xFF
-
- print("=======================================")
- # 第一个参数是保存为的图片名,第二个参数为待保存图像,jpeg格式
- cv2.imwrite("photo" + str(num) + ".jpg", frame)
- print("width = ", width)
- print("height = ", height)
- print("success to save photo: "'photo' + str(num)+".jpg")
- print("=======================================")
- break
-
- # 释放摄像头
- cap.release()
- # 关闭窗口
- cv2.destroyAllWindows()
执行程序:
python3 camera_photo.py
可以通过下面方法获取摄像头的video编号
- import subprocess
-
- def get_camera_device():
- '''获取可用的摄像头'''
- try:
- output = subprocess.check_output("v4l2-ctl --list-devices", shell=True).decode()
- print(output)
- index = output.index('HD video')
- end_str = output[index:]
-
- lines = end_str.split('\n')
- for line in lines:
- if "/dev/video" in line: # 根据摄像头名称进行匹配
- index = line.index('/dev/video')
- device = line[index + len('/dev/video'):]
- return int(device)
- except subprocess.CalledProcessError as e:
- print("Error:", e)
- return -1
- import os
- import cv2
- import time
-
- # 帧宽,高度,帧率
- width = 640
- height = 480
- fps = 25.0
-
- # 创建一个VideoCapture对象,并打开系统默认的摄像头
- video = cv2.VideoCapture(9)
-
- # 设置帧宽和高度
- video.set(cv2.CAP_PROP_FRAME_WIDTH, width)
- video.set(cv2.CAP_PROP_FRAME_HEIGHT, height)
-
- # 定义视频文件的写入格式,未压缩的YUV颜色编码类型(使用该格式保存的视频文件很大,需要注意下),有些格式可能不支持,编码器失败,需要安装相关库
- # fourcc = cv2.VideoWriter_fourcc(*'MJPG')
- fourcc = cv2.VideoWriter_fourcc('I','4','2','0')
-
- # 用于实现多张图像保存成视频文件,第一个参数是需要保存的视频文件名称,第二个函数是编解码器的代码,
- # 第三个参数为保存视频的帧率,第四个参数是保存的视频文件的尺寸,一定要与图像的尺寸相同
- # out = cv2.VideoWriter('output.mp4',fourcc, fps, (width,height))
- out = cv2.VideoWriter('output.avi',fourcc, fps, (width,height))
- def main():
- count = 0
- while(video.isOpened()):
- ret, frame = video.read()
- if not ret:
- continue
- if count>100:
- return
-
- # 将捕捉到的图像存储,保存的视频是没有声音的
- out.write(frame)
- count+=1
- time.sleep(0.04)
-
-
- # 释放资源
- video.release()
- out.release()
- cv2.destroyAllWindows()
-
- if __name__ == '__main__':
- main()
录制视频格式
参数 | 解释 |
VideoWriter_fourcc('M','P','4','V') | MPEG-4编码 .mp4 可指定结果视频的大小 |
VideoWriter_fourcc('X','2','6','4') | MPEG-4编码 .mp4 可指定结果视频的大小 |
VideoWriter_fourcc('I', '4', '2', '0') | 该参数是YUV编码类型,文件名后缀为.avi 广泛兼容,``但会产生大文件 |
VideoWriter_fourcc('P', 'I', 'M', 'I') | 该参数是MPEG-1编码类型,文件名后缀为.avi |
VideoWriter_fourcc('X', 'V', 'I', 'D') | 该参数是MPEG-4编码类型,文件名后缀为.avi,``可指定结果视频的大小 |
VideoWriter_fourcc('T', 'H', 'E', 'O') | 该参数是Ogg Vorbis,文件名后缀为.ogv |
VideoWriter_fourcc('F', 'L', 'V', '1') | 该参数是Flash视频,文件名后缀为.flv |
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。