当前位置:   article > 正文

泰山派摄像头使用-opencv流程

泰山派摄像头使用-opencv流程

1. 泰山派添加camera

连接摄像头连接到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采集

2. 相关工具库安装

安装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
>>> 

3. 摄像头拍照 

  1. import cv2
  2. import time
  3. # 帧宽和高度
  4. width = 640
  5. height = 480
  6. num = 1
  7. # 创建一个VideoCapture对象,并打开系统默认的摄像头(也可以打开视频或者指定的设备)
  8. cap = cv2.VideoCapture(9)
  9. # 不能打开摄像头
  10. if not cap.isOpened():
  11. raise RuntimeError('Could not open camera.')
  12. # 设置帧宽和高度
  13. cap.set(cv2.CAP_PROP_FRAME_WIDTH, width)
  14. cap.set(cv2.CAP_PROP_FRAME_HEIGHT, height)
  15. while(cap.isOpened()):
  16. time.sleep(2)
  17. # 返回两个参数,ret表示是否正常打开,frame是图像数组,一帧
  18. ret,frame = cap.read()
  19. # 窗口显示,名为Lubancat_Camera_test
  20. cv2.imshow("Lubancat_Camera_test", frame)
  21. # 延迟1ms,并根据键盘输入返回值val,是板卡接的键盘
  22. val = cv2.waitKey(1) & 0xFF
  23. print("=======================================")
  24. # 第一个参数是保存为的图片名,第二个参数为待保存图像,jpeg格式
  25. cv2.imwrite("photo" + str(num) + ".jpg", frame)
  26. print("width = ", width)
  27. print("height = ", height)
  28. print("success to save photo: "'photo' + str(num)+".jpg")
  29. print("=======================================")
  30. break
  31. # 释放摄像头
  32. cap.release()
  33. # 关闭窗口
  34. cv2.destroyAllWindows()

执行程序:

python3 camera_photo.py

可以通过下面方法获取摄像头的video编号

  1. import subprocess
  2. def get_camera_device():
  3. '''获取可用的摄像头'''
  4. try:
  5. output = subprocess.check_output("v4l2-ctl --list-devices", shell=True).decode()
  6. print(output)
  7. index = output.index('HD video')
  8. end_str = output[index:]
  9. lines = end_str.split('\n')
  10. for line in lines:
  11. if "/dev/video" in line: # 根据摄像头名称进行匹配
  12. index = line.index('/dev/video')
  13. device = line[index + len('/dev/video'):]
  14. return int(device)
  15. except subprocess.CalledProcessError as e:
  16. print("Error:", e)
  17. return -1

3.1. 录制视频 

  1. import os
  2. import cv2
  3. import time
  4. # 帧宽,高度,帧率
  5. width = 640
  6. height = 480
  7. fps = 25.0
  8. # 创建一个VideoCapture对象,并打开系统默认的摄像头
  9. video = cv2.VideoCapture(9)
  10. # 设置帧宽和高度
  11. video.set(cv2.CAP_PROP_FRAME_WIDTH, width)
  12. video.set(cv2.CAP_PROP_FRAME_HEIGHT, height)
  13. # 定义视频文件的写入格式,未压缩的YUV颜色编码类型(使用该格式保存的视频文件很大,需要注意下),有些格式可能不支持,编码器失败,需要安装相关库
  14. # fourcc = cv2.VideoWriter_fourcc(*'MJPG')
  15. fourcc = cv2.VideoWriter_fourcc('I','4','2','0')
  16. # 用于实现多张图像保存成视频文件,第一个参数是需要保存的视频文件名称,第二个函数是编解码器的代码,
  17. # 第三个参数为保存视频的帧率,第四个参数是保存的视频文件的尺寸,一定要与图像的尺寸相同
  18. # out = cv2.VideoWriter('output.mp4',fourcc, fps, (width,height))
  19. out = cv2.VideoWriter('output.avi',fourcc, fps, (width,height))
  20. def main():
  21. count = 0
  22. while(video.isOpened()):
  23. ret, frame = video.read()
  24. if not ret:
  25. continue
  26. if count>100:
  27. return
  28. # 将捕捉到的图像存储,保存的视频是没有声音的
  29. out.write(frame)
  30. count+=1
  31. time.sleep(0.04)
  32. # 释放资源
  33. video.release()
  34. out.release()
  35. cv2.destroyAllWindows()
  36. if __name__ == '__main__':
  37. 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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/119937
推荐阅读
相关标签
  

闽ICP备14008679号