泰山派摄像头使用-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. 摄像头拍照 


import cv2
import time# 帧宽和高度
width = 640
height = 480num = 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_testcv2.imshow("Lubancat_Camera_test", frame)# 延迟1ms,并根据键盘输入返回值val,是板卡接的键盘val = cv2.waitKey(1) & 0xFFprint("=======================================")# 第一个参数是保存为的图片名,第二个参数为待保存图像,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 subprocessdef 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

3.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 = 0while(video.isOpened()):ret, frame = video.read()if not ret:continueif count>100:return# 将捕捉到的图像存储,保存的视频是没有声音的out.write(frame)count+=1time.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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/478753.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RabbitMQ死信队列、延迟队列原理实战

1.死信队列TTL 什么是TTL time to live:消息存活时间如果消息在存活时间内未被消费,则会被清除RabbitMQ支持两种TTL设置 单独消息进行配置TTL整个队列进行配置TTL(使用居多) 什么是RabbitMQ的死信队列 没有被及时消费的消息存放…

智慧公厕管理系统:让城市智慧驿站更加智慧舒适

智慧公厕管理系统是城市智慧驿站中不可或缺的一部分,它通过全方位的信息化解决方案,为公共厕所的使用、运营和管理提供了一种智能化的方式。作为城市智慧驿站的重要组成部分,智慧公厕管理系统发挥着重要的作用,为城市社会民生提供…

外汇天眼:遭遇交易问题?看这篇就够了!

对于投资者来说,资金安全是投资过程中的首要问题。然而在外汇交易中,即使是摒弃了黑平台,在正规的交易平台,投资者也可能会遭遇拖延出金或者因市场行情突发滑点爆仓等交易问题,这不仅会增加投资者的焦虑心情&#xff0…

Unity3D中刚体、碰撞组件、物理组件的区别详解

前言 Unity3D提供了丰富的功能和组件,其中包括刚体、碰撞组件和物理组件。这些组件在游戏开发中起着非常重要的作用,能够让游戏世界更加真实和有趣。本文将详细介绍这三种组件的区别以及如何在Unity3D中实现它们。 对惹,这里有一个游戏开发…

STM32的SDIO

一.SDIO简介 SDIO,全称Secure Digital Input/Output,是一种用于在移动设备和嵌入式系统中实现输入/输出功能的接口标准。它结合了SD卡的存储功能和I/O功能,允许设备通过SD卡槽进行数据输入输出和外围设备连接。 SDIO接口通常被用于连接各种…

Backend - Django SimpleUI(美化 Django Admin )

目录 一、作用 二、安装 & 配置 (一)安装依赖 (二)配置 (三)运行 三、基础设定 (一)创建用户 (二)设置标题 (三)设置登录…

MySQL学习记录——십사 使用C访问MySQL

文章目录 1、准备工作2、操作3、select 1、准备工作 root用户的mysql下,创建一个普通用户,创建一个库,通过这个库给普通用户所有权限 create user connectorlocalhost identified by 123456;create database conn;grant all on conn.* to c…

做外贸有哪些值得学习的报价技巧?

外贸新人在收到新客户的询盘后如何第一时间回复邮件报价,一份什么样的报价单,能让客户感受到潜在供应商的工作效率和专业度? 报价单基本内容 完整的卖家基本资料、logo 完整的买家基本信息 抬头要写编号、报价日期 产品基本信息&#xf…

jq 图片懒加载 + Vue-Lazyload

jq原生 图片 懒加载 <!DOCTYPE html> <html lang"zh-cn"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><meta http-equiv"X-UA-Compati…

js数组转字符串

1, array.toString(),将一个数组转化成一个字符串&#xff0c;转换后的类型为string类型&#xff0c;默认用&#xff0c;隔开。 <script type"text/javascript">var a[1,2,3,4,5,6,7,8,9,0];//原数组var ba.toString();console.log(a)console.log(b)console.…

OpenAI视频生成模型Sora的全面解析:从ViViT、Diffusion Transformer到NaViT、VideoPoet

前言 真没想到&#xff0c;距离视频生成上一轮的集中爆发(详见《Sora之前的视频生成发展史&#xff1a;从Gen2、Emu Video到PixelDance、SVD、Pika 1.0》)才过去三个月&#xff0c;没想OpenAI一出手&#xff0c;该领域又直接变天了 自打2.16日OpenAI发布sora以来(其开发团队包…

Soul CEO张璐团队全方位构筑反诈防护网,守护清朗网络空间

最近,随着《孤注一掷》、《鹦鹉杀》等以反映网络诈骗为题材的电影的热映,网络诈骗问题再次引起舆论的广泛关注。面对不断升级的网络诈骗威胁,以及防无可防的“杀猪盘”,普罗大众该如何避免?互联网社交平台又该如何打击网络诈骗,保障用户的社交安全,这都是摆在线上社交平台发展…