泰山派摄像头使用-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.mzph.cn/news/690942.shtml

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

相关文章

CentOS上如何配置手动和定时任务自动进行时间同步

场景 Linux(Centos)上使用crontab实现定时任务(定时执行脚本): Linux(Centos)上使用crontab实现定时任务(定时执行脚本)_centos 定时任务-CSDN博客 Winserver上如何配置和开启NTP客户端进行时间同步: Winserver上如何配置和开启NTP客户端进行时间同步…

ADS-B Receiver Module TT-SC1 for UAV and Drones

目录 Introduction Applications Main features Technical parameters Basic technical information Electrical specification Recommended operation conditions General electrical parameters Introduction TT-SC1 is a high quality and low price OEM ADS-B…

使用【Python+Appium】实现自动化测试

一、环境准备 1.脚本语言:Python3.x IDE:安装Pycharm 2.安装Java JDK 、Android SDK 3.adb环境,path添加E:\Software\Android_SDK\platform-tools 4.安装Appium for windows,官网地址 Redirecting 点击下载按钮会到GitHub的…

java面试题之redis篇

1.redis 中的数据类型有哪些 随着 Redis 版本的更新,后面又支持了四种数据类型: BitMap(2.2 版新增)、HyperLogLog(2.8 版新增)、GEO(3.2 版新增)、Stream(5.0 版新增&am…

Java+SpringBoot:农业疾病防治新选择

✍✍计算机编程指导师 ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java实战 |…

基于FPGA的I2C接口控制器(包含单字节和多字节读写)

1、概括 前文对IIC的时序做了详细的讲解,还有不懂的可以获取TI的IIC数据手册查看原理。通过手册需要知道的是IIC读、写数据都是以字节为单位,每次操作后接收方都需要进行应答。主机向从机写入数据后,从机接收数据,需要把总线拉低来…

Linux常用操作指令

Linux常用操作指令 ls 指令 语法:ls [选项][目录或文件] 功能:对于目录,该命令列出该目录下的所有子目录与文件。对于文件,将列出文件名以及其他信息。 常用选项: -a 列出目录下的所有文件,包括以 . 开头…

快速入门:使用 create-react-app 构建你的第一个 React 项目

快速入门:使用 create-react-app 构建你的第一个 React 项目 当你决定开始一个新的 React 项目时,一种常见的方法是使用 create-react-app 这个工具。它简化了整个搭建过程,让你可以更快地开始编写代码,而不必担心繁琐的配置。 …

java Lock常用锁

在Java中,Lock接口提供了比synchronized关键字更广泛的锁定操作。Lock接口有许多实现,但是最常见的是ReentrantLock和ReadWriteLock。 1. ReentrantLock:重入锁,即支持再次进入已经获得的锁,也就是说线程可以进入任何…

【LeetCode每日一题】单调栈 581. 最短无序连续子数组

581. 最短无序连续子数组 给你一个整数数组 nums ,你需要找出一个 连续子数组 ,如果对这个子数组进行升序排序,那么整个数组都会变为升序排序。 请你找出符合题意的 最短 子数组,并输出它的长度。 示例 1: 输入&am…

【力扣每日一题】力扣590N叉树的后序遍历

题目来源 力扣590N叉树的后序遍历 题目概述 给定一个 n 叉树的根节点 root &#xff0c;返回 其节点值的 后序遍历 。 思路分析 前面几篇博客讲过了二叉树和N叉树的各种遍历方式。这道题目也是一样的。 代码实现 public class Solution {List<Integer> res new A…

穿越时空的数据旅行者:RIP协议全景解析与未来展望

1. RIP协议概述 路由信息协议&#xff08;Routing Information Protocol, RIP&#xff09;是一种内部网关协议&#xff08;Interior Gateway Protocol, IGP&#xff09;&#xff0c;设计用于在局域网&#xff08;LANs&#xff09;和较小规模的广域网&#xff08;WANs&#xff…

【lesson59】线程池问题解答和读者写者问题

文章目录 线程池问题解答什么是单例模式什么是设计模式单例模式的特点饿汉和懒汉模式的理解STL中的容器是否是线程安全的?智能指针是否是线程安全的&#xff1f;其他常见的各种锁 读者写者问题 线程池问题解答 什么是单例模式 单例模式是一种 “经典的, 常用的, 常考的” 设…

历年CSP-J(NOIP普及组)考点分析与分类汇总

持续更新中.... CSP-J (NOIP 普及组 ) 历年复赛真题考察内容 (1998 &#xff5e; 2023) 考点分析&#xff1a; CSP-J(NOIP 普及组)-T1知识点统计 年份题目名考点2010数字统计整数拆分&#xff0c;数位分离2011数字反转整数拆分&#xff0c;数位分离2012质因数分解质因数分解2…

【软考】软件质量模型

目录 一、说明二、ISO/IEC 9126软件质量模型2.1 说明2.2 功能性2.3 可靠性2.4 易使用性2.5 效率2.6 可维护性2.7 可移植性 三、Mc Call软件质量模型 一、说明 1.软件质量是指反映软件系统或软件产品满足规定或隐含需求的能力的特征和特性全体。软件质量管理是指对软件开发过程进…

【Vuforia+Unity】01实现单张多张图片识别产生对应数字内容

1.官网注册 Home | Engine Developer Portal 2.下载插件SDK&#xff0c;导入Unity 3.官网创建数据库上传图片&#xff0c;官网处理成数据 下载好导入Unity&#xff01; 下载好导入Unity&#xff01; 下载好导入Unity&#xff01; 下载好导入Unity&#xff01; 4.在Unity设…

数据结构排序:插入排序、希尔排序、选择排序、冒泡排序、堆排序、快速排序

文章目录 插入排序希尔排序选择排序冒泡排序堆排序快速排序 插入排序 基本思想&#xff1a; 直接插入排序是一种简单的插入排序法&#xff0c;其基本思想是&#xff1a; 把待排序的值按其关键码值的大小逐个插入到一个已经排好序的有序序列中&#xff0c;直到所有的记录插入完…

MongoDB文档插入

文章目录 MongoDB文档插入对比增删改查文档插入 MongoDB写安全机制非确认式写入 MongoDB文档查询参数说明查询操作符比较查询操作符逻辑查询操作符元素查询操作符数组查询操作符 模糊查询区别:$regex操作符中的option选项 MongoDB游标介绍游标函数手动迭代游标示例游标介绍 Mon…

前端样式 Flex布局(Flexible Box Layout)用法详解

Flex布局&#xff08;Flexible Box Layout&#xff09;是一种用于在容器内分配和对齐子元素的高效方式。通过Flex布局&#xff0c;可以轻松实现各种复杂的布局结构&#xff0c;同时保持良好的响应性和可维护性。本文将详细介绍Flex布局的用法&#xff0c;包括容器属性和子元素属…

有事休假店铺无人看守怎么办?智能远程视频监控系统保卫店铺安全

在春节期间&#xff0c;很多自营店主也得到了久违的假期&#xff0c;虽然很多店主都是长期在店铺中看守&#xff0c;但遇到春节这样的日子&#xff0c;多数人还是选择回乡休假。面对店主休假或有事不能管理店铺时&#xff0c;传统的监控虽然可以做到单一的监控&#xff0c;却仍…