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

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 = 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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何构建企业专属GPT

大语言模型(LLM)具有令人印象深刻的自然语言理解和生成能力, 2022年11月底OpenAI发布了ChatGPT,一跃成为人工智能AI领域的现象级应用。但由于LLM的训练数据集主要来源于互联网数据,企业私域信息并未被LLM所训练&#x…

【RPG Maker MV 仿新仙剑 战斗场景UI (二)】

RPG Maker MV 仿新仙剑 战斗场景UI 二 战斗指令菜单原仙剑战斗指令图RMMV战斗指令对应代码战斗指令菜单代码效果 战斗指令菜单 原仙剑战斗指令菜单是使用方向键控制,同时按照使用情况正好对应四个指令和四个方向,同时没有选中的菜单用黑色透明图片覆盖&…

基于数字双输入的超宽带Doherty功率放大器设计-从理论到ADS版图

基于数字双输入的超宽带Doherty功率放大器设计-从理论到ADS版图 参考论文: 高效连续型射频功率放大器研究 假期就要倒计时啦,估计是寒假假期的最后一个博客,希望各位龙年工作顺利,学业有成。 全部工程下载:基于数字双输入的超宽…

npm run dev运行出现NODE_OPTIONS=--max_old_space_size=4096 vite --mode dev --host?

问题描述 PS E:\AWorkDataease\DataEase\core\core-frontend> npm run dev dataease0.0.0 dev NODE_OPTIONS–max_old_space_size4096 vite --mode dev --host 0.0.0.0 ‘NODE_OPTIONS’ 不是内部或外部命令,也不是可运行的程序 或批处理文件。 解决方案 遇到…

Linux RabbitMQ 安装及卸载

一、安装 1、前景 RabbitMQ是用Erlang编写的,所以需要先安装Erlang的编译环境 注意 Erlang和RabbitMQ的版本是有一些版本匹配关系的,如果不匹配会导致RabbitMQ无法启动 2、安装Erlang # 下载 wget https://packages.erlang-solutions.com/erlang/r…

使用纯 CSS 实现元素高度的过渡(不采用 max-height)

1. 前言 不知大家是否接触过元素高度的过渡,之前呢我是使用 CSS 加 JS 的方式来解决的,就是通过 JS 计算一下要过渡的元素的高度,然后自己给它加上 height 为某一数值。不知大家是如何解决的? 相信大家在做高度过渡时&#xff0…

Mac远程连接Windows 11

1. Windows配置 1.1 打开远程连接权限 打开“控制面板”搜索“远程”,选择“允许远程访问你的计算机”这一项。 1.2 添加远程连接用户 打开“计算机管理”,并在用户下新增“新用户”,share是我自己使用的名字,这个名字不固定随…

【Java EE初阶二十】关于http(一)

1. 初识http HTTP 最新的版本应该是 HTTP/3.0,目前大规模使用的版本 HTTP/1.1; 下面来简单说明一下使用 HTTP 协议的场景: 1、浏览器打开网站 (基本上) 2、手机 APP 访问对应的服务器 (大概率) 前面的 TCP与UDP 和http不同,HTTP 的报文格式&a…

0、电源管理入门之开篇即巅峰

目录 1. 电源状态介绍 2. Linux 电源管理的组成 3. ARM SoC中PCSA与SCP 4. SoC设计中的电源管理 “人是铁饭是钢,一顿不吃饿得慌”,对于嵌入式设备而言,没有电一切都白瞎,特别是带电池的终端嵌入式设备,对电能的管理尤其重要,也是我们调试设备的一个重点。可以说…

[工具探索]VSCode介绍和进阶使用

相比较GoLand、PhpStorm、PyCharm、WebStorm的重量级内存占用,从Windows系统来,各种卡死,换到MacOS倒不会卡死,但是内存占用太多,影响体验,决定换到VSCode。当然这个过程需要适应过渡期,旧伙计都…

文件包含+文件上传漏洞(图片马绕过)

目录 一.文件包含二.文件上传三.图片马四.题目 一.文件包含 将已有的代码以文件形式包含到某个指定的代码中,从而使用其中的代码或者数据,一般是为了方便直接调用所需文件,文件包含的存在使得开发变得更加灵活和方便(若对用户输入…

广州游戏业:低调内敛 务实创新

广州游戏业:低调内敛 务实创新 中国游戏产业发展迅猛,不同城市因地制宜,各具特色。本篇我们的视角转到历史悠久的广州,看看这座百年老城的游戏业正在以怎样的姿态前行。 广州在中国游戏产业中有其独特地位——作为游戏产业发源地…

k8s学习(RKE+k8s+rancher2.x)成长系列之简配版环境搭建(三)

3.19.切换RKE用户,并做免密登录(三台机器相互免密) su rke cd~ ssh-keygen[rkemaster.ssh]$ssh-copy-id rkeslaver2 [rkemaster.ssh]$ssh-copy-id rkeslaver1 [rkemaster.ssh]$ssh-copy-id rkemaster3.20.搭建RKE集群 为了方便理解&#…

Mac清理系统垃圾软件CleanMyMac X2025免费版本下载

嘿,Mac用户们,你是否经常感觉你的Mac就像是在背着一个沉重的包袱在跑步?是的,我在说那些堆积如山的系统垃圾。清理这些垃圾不仅可以让你的Mac跑得更快,还能让它“呼吸”更畅快。今天,让我们一起来探索如何M…

数字化转型导师坚鹏:政府数字化转型之数字化技术

政府数字化转型之数字化技术 ——物联网、云计算、大数据、人工智能、虚拟现实、区块链、数字孪生、元宇宙等综合解析及应用 课程背景: 数字化背景下,很多政府存在以下问题: 不清楚新技术的发展现状? 不清楚新技术的重要应…

单片机01天_stm32f407zg_创建新工程

创建“寄存器版工程” 1、创建工程文件夹 创建工程文件夹“Project”,内部包含文件夹“CMSIS”&&“USER”。 CMSIS:Cortex系列内核接口驱动文件。 USER:存放用户编写的程序文件。 “USER”文件夹内包含“Inc”&&“Src”…

Apache Apisix网关系统历史漏洞复现分析

文章目录 前言CVE-2020-13945默认api令牌CVE-2021-45232未授权接口2.1 默认账户密码导致RCE2.2 未授权访问api接口RCE CVE-2022-24112 地址限制绕过CVE-2022-29266 JWT令牌伪造4.1 漏洞源码简析与修复4.2 漏洞环境搭建与复现 总结 前言 Apache APISIX 是一个动态、实时、高性能…

J-Flash J-Link解锁GD32单片机

目录 前言一、使用J-Flash工具解锁单片机1.打开J-Flash软件2.创建工程3.连接 J-Link4.解锁Flash 二、使用J-Link STM32 Unlock解锁GD321.打开J-Link STM32 Unlock工具2.命令行输入3.解锁成功4.验证 三、附录总结😀*授人鱼,更要授人以渔,希望猿一的本篇博…

mysql同类型的多行变成一行value1和value2不同的列

关键字 row_number() over (partition by) 例如,下面的数据, 这是按照name分组后,展示property值。 我们想得到这样的值; 第一步:将每一组的property标上序号 select name,property,row_number() over (partition by name order…

零基础入门金融风控-贷款违约预测Task2 数据分析

Task2 数据分析 此部分为零基础入门金融风控的 Task2 数据分析部分,带你来了解数据,熟悉数据,为后续的特征工程做准备,欢迎大家后续多多交流。 赛题:零基础入门数据挖掘 - 零基础入门金融风控之贷款违约 目的&#…