开源相机管理库Aravis例程学习(二)——连续采集multiple-acquisition-main-thread

本文主要是介绍开源相机管理库Aravis例程学习(二)——连续采集multiple-acquisition-main-thread,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

开源相机管理库Aravis例程学习(二)——连续采集multiple-acquisition-main-thread

  • 简介
  • 例程代码
  • 函数说明
    • arv_camera_set_acquisition_mode
    • arv_camera_create_stream
    • arv_camera_get_payload
    • arv_buffer_new
    • arv_stream_push_buffer
    • arv_camera_start_acquisition
    • arv_stream_pop_buffer
    • arv_camera_stop_acquisition

简介

本文针对官方例程中的:02-multiple-acquisition-main-thread做简单的讲解,并简单介绍其中调用的arv_camera_set_acquisition_mode arv_camera_create_streamarv_camera_get_payloadarv_buffer_new arv_stream_push_bufferarv_camera_start_acquisitionarv_stream_pop_bufferarv_camera_stop_acquisition函数。

aravis版本:0.8.31
操作系统:ubuntu-20.04
gcc版本:9.4.0

例程代码

这段代码使用Aravis的API,控制相机连续采集,并在主线程中从缓冲区获取前10帧图像(假设不丢帧),主要操作步骤如下:

  • 连接相机
  • 设置采集模式为连续采集
  • 创建流对象,并向流对象的buffer池中添加buffer
  • 开始采集
  • 从buffer池中获取10个图像数据
  • 停止采集
  • 释放资源
/* SPDX-License-Identifier:Unlicense *//* Aravis header */
#include <arv.h>
/* Standard headers */
#include <stdlib.h>
#include <stdio.h>/** Connect to the first available camera, then acquire 10 buffers.*/
int main (int argc, char **argv)
{ArvCamera *camera;GError *error = NULL;//连接相机camera = arv_camera_new ("192.168.6.63", &error);if (ARV_IS_CAMERA (camera)) {ArvStream *stream = NULL;printf ("Found camera '%s'\n", arv_camera_get_model_name (camera, NULL));//设置相机采集模式为连续采集arv_camera_set_acquisition_mode (camera, ARV_ACQUISITION_MODE_CONTINUOUS, &error);if (error == NULL)//创建流对象stream = arv_camera_create_stream (camera, NULL, NULL, &error);if (ARV_IS_STREAM (stream)) {int i;size_t payload;//从相机对象中获取图像负载大小(每个图像的字节大小)payload = arv_camera_get_payload (camera, &error);if (error == NULL) {for (i = 0; i < 2; i++)//在流对象buffer池中插入两个bufferarv_stream_push_buffer (stream, arv_buffer_new (payload, NULL));}if (error == NULL)//开始采集arv_camera_start_acquisition (camera, &error);if (error == NULL) {for (i = 0; i < 10; i++) {ArvBuffer *buffer;//从流对象中获取buffer,此时buffer中已经包含了图像数据buffer = arv_stream_pop_buffer (stream);if (ARV_IS_BUFFER (buffer)) {printf ("Acquired %d×%d buffer\n",arv_buffer_get_image_width (buffer),arv_buffer_get_image_height (buffer));//将buffer放回流对象的buffer池中,而不是销毁arv_stream_push_buffer (stream, buffer);}}}if (error == NULL)//停止采集arv_camera_stop_acquisition (camera, &error);g_clear_object (&stream);}g_clear_object (&camera);}if (error != NULL) {printf ("Error: %s\n", error->message);return EXIT_FAILURE;}return EXIT_SUCCESS;
}

此例程较为简单,每一步的细节查看注释即可,此处不过多讲解。

运行结果:
在这里插入图片描述

函数说明

arv_camera_set_acquisition_mode

简介:设置相机的采集模式

void arv_camera_set_acquisition_mode(ArvCamera* camera,ArvAcquisitionMode value,GError** error
)

其中value是个枚举值,可选的值有:ARV_ACQUISITION_MODE_CONTINUOUSARV_ACQUISITION_MODE_SINGLE_FRAMEARV_ACQUISITION_MODE_MULTI_FRAME分别代表连续采集,单帧采集和多帧采集。

arv_camera_create_stream

简介:创建流对象
注意:最终必须调用g_object_unref()释放内存

ArvStream* arv_camera_create_stream(ArvCamera* camera,ArvStreamCallback callback,void* user_data,GError** error
)

其中callback是个回调函数,用于数据帧的处理;user_data是向回调函数中传递的用户数据。本例中这两个参数均为NULL,表示不使用回调函数。

Available since: 0.2.0

arv_camera_get_payload

简介:从相机检索一个图像所需的存储空间大小。此值一般用于创建流缓冲区。

guint arv_camera_get_payload(ArvCamera* camera, GError** error)

Available since: 0.8.0

arv_buffer_new

简介:此函数用于创建一个新的缓冲区,专门用来存储视频流图像的数据。函数提供了灵活的内存管理选项,让调用者可以选择预先分配内存(后续可由调用者重新分配)或由函数来分配内存。

ArvBuffer* arv_buffer_new(size_t size, void* preallocated)

其中preallocated指向预分配的内存缓冲区。若此参数不为NULL,则指向的内存将用作缓冲区存储数据;为NULL则由函数分配内存。

Available since: 0.2.0

arv_stream_push_buffer

简介:将一个buffer添加到一个特定的流中。当缓冲区被推送到流中时,流对象接管了该缓冲区对象的所有权。

void arv_stream_push_buffer(ArvStream* stream, ArvBuffer* buffer)

Available since: 0.2.0

arv_camera_start_acquisition

简介:开始采集

void arv_camera_start_acquisition(ArvCamera* camera, GError** error)

Available since: 0.8.0

arv_stream_pop_buffer

简介:从流的输出队列中弹出一个buffer并返回。这个buffer可能包含无效的图像数据,调用者应在使用图像数据前检查其有效性。
若输出队列为空,则阻塞至数据来临。

ArvBuffer* arv_stream_pop_buffer(ArvStream* stream)

Available since: 0.2.0

arv_camera_stop_acquisition

简介:停止采集

void arv_camera_stop_acquisition(ArvCamera* camera, GError** error)

Available since: 0.8.0

这篇关于开源相机管理库Aravis例程学习(二)——连续采集multiple-acquisition-main-thread的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/907887

相关文章

高效管理你的Linux系统: Debian操作系统常用命令指南

《高效管理你的Linux系统:Debian操作系统常用命令指南》在Debian操作系统中,了解和掌握常用命令对于提高工作效率和系统管理至关重要,本文将详细介绍Debian的常用命令,帮助读者更好地使... Debian是一个流行的linux发行版,它以其稳定性、强大的软件包管理和丰富的社区资源而闻名。在使用

SpringBoot使用minio进行文件管理的流程步骤

《SpringBoot使用minio进行文件管理的流程步骤》MinIO是一个高性能的对象存储系统,兼容AmazonS3API,该软件设计用于处理非结构化数据,如图片、视频、日志文件以及备份数据等,本文... 目录一、拉取minio镜像二、创建配置文件和上传文件的目录三、启动容器四、浏览器登录 minio五、

IDEA中的Kafka管理神器详解

《IDEA中的Kafka管理神器详解》这款基于IDEA插件实现的Kafka管理工具,能够在本地IDE环境中直接运行,简化了设置流程,为开发者提供了更加紧密集成、高效且直观的Kafka操作体验... 目录免安装:IDEA中的Kafka管理神器!简介安装必要的插件创建 Kafka 连接第一步:创建连接第二步:选

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

阿里开源语音识别SenseVoiceWindows环境部署

SenseVoice介绍 SenseVoice 专注于高精度多语言语音识别、情感辨识和音频事件检测多语言识别: 采用超过 40 万小时数据训练,支持超过 50 种语言,识别效果上优于 Whisper 模型。富文本识别:具备优秀的情感识别,能够在测试数据上达到和超过目前最佳情感识别模型的效果。支持声音事件检测能力,支持音乐、掌声、笑声、哭声、咳嗽、喷嚏等多种常见人机交互事件进行检测。高效推

poj2406(连续重复子串)

题意:判断串s是不是str^n,求str的最大长度。 解题思路:kmp可解,后缀数组的倍增算法超时。next[i]表示在第i位匹配失败后,自动跳转到next[i],所以1到next[n]这个串 等于 n-next[n]+1到n这个串。 代码如下; #include<iostream>#include<algorithm>#include<stdio.h>#include<math.