开源相机管理库Aravis例程学习(六)——camera-features

news/2024/10/16 0:16:28

目录
  • 简介
  • 例程代码
  • 函数说明
    • arv_camera_get_integer
    • arv_camera_get_string

简介

本文针对官方例程中的:04-camera-features做简单的讲解。并介绍其中调用的arv_camera_get_integerarv_camera_get_string

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

例程代码

这段代码使用Aravis的API,获取相机的一些基本设置,如图像的宽度、高度和像素格式,主要操作步骤如下:

  • 连接相机
  • 获取图像宽度,高度,像素格式等信息
  • 释放资源
/* SPDX-License-Identifier:Unlicense *//* Aravis header */
#include <arv.h>/* Standard headers */
#include <stdlib.h>
#include <stdio.h>/** Connect to the first available camera, then display the current settings for image width and height, as well as the* pixel format, using the more generic ArvCamera feature API.*/int main (int argc, char **argv)
{ArvCamera *camera;GError *error = NULL;//连接相机camera = arv_camera_new (NULL, &error);if (ARV_IS_CAMERA (camera)) {int width;int height;const char *pixel_format;printf ("Found camera '%s'\n", arv_camera_get_model_name (camera, NULL));/* Retrieve generally mandatory features for transmitters */if (!error) width = arv_camera_get_integer (camera, "Width", &error);if (!error) height = arv_camera_get_integer (camera, "Height", &error);if (!error) pixel_format = arv_camera_get_string (camera, "PixelFormat", &error);if (error == NULL) {printf ("Width = %d\n", width);printf ("Height = %d\n", height);printf ("Pixel format = %s\n", pixel_format);}g_clear_object (&camera);}if (error != NULL) {/* En error happened, display the correspdonding message */printf ("Error: %s\n", error->message);return EXIT_FAILURE;}return EXIT_SUCCESS;
}

这个例程与03-camera-api实现的功能相似,但是不同的是本文的代码使用的是更为通用的API(arv_camera_get_integerarv_camera_get_string)来获取的相机的参数。

我们查看03-camera-api中的arv_camera_get_regionarv_camera_get_pixel_format_as_string的函数定义可以发现,他们的底层其实就是通过调用arv_camera_get_integerarv_camera_get_string来实现的相关功能:

//file: arvcamera.c
void arv_camera_get_region (ArvCamera *camera, gint *x, gint *y, gint *width, gint *height, GError **error)
{ArvCameraPrivate *priv = arv_camera_get_instance_private (camera);GError *local_error = NULL;g_return_if_fail (ARV_IS_CAMERA (camera));if (x != NULL)*x = priv->has_region_offset ? arv_camera_get_integer (camera, "OffsetX", &local_error) : 0;if (y != NULL && local_error == NULL)*y = priv->has_region_offset ? arv_camera_get_integer (camera, "OffsetY", &local_error) : 0;if (width != NULL && local_error == NULL)*width = arv_camera_get_integer (camera, "Width", &local_error);if (height != NULL && local_error == NULL)*height = arv_camera_get_integer (camera, "Height", &local_error);if (local_error != NULL)g_propagate_error (error, local_error);
}const char * arv_camera_get_pixel_format_as_string (ArvCamera *camera, GError **error)
{return arv_camera_get_string (camera, "PixelFormat", error);
}

运行结果:

函数说明

arv_camera_get_integer

简介:获取已连接相机的一个整数型特性的值

gint64 arv_camera_get_integer (ArvCamera* camera,const char* feature,GError** error
)

Available since: 0.8.0

arv_camera_get_string

简介:获取已连接相机的一个字符串型特性的值

const char* arv_camera_get_string (ArvCamera* camera,const char* feature,GError** error
)

Available since: 0.8.0

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

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

相关文章

sqlilabs通关02-中级篇:less23-37

less23:注释符绕过 先看代码 ​​可以看到对字符进行替换,将 #号和--替换成了空通过sql语句,可以知道闭合符号是单引号然后就可以开始尝试了,由于这关是get,直接修改url的参数即可 ?id=1 #正常访问 #绕过 ?id=1 and 1=1 ?id=1 and sleep(3)%20 and%20 1=1 #说明可以使…

中国39个行业产业链全景图

找了很久的各个行业产业链,今天终于发现这个整理得非常好的39个行业产业链全景图。主要行业基本都在里面了,每个行业上下游产业都包括哪些一张图你就看明白了! 新能源汽车产业链全景 机器人产业链全景图 房地产产业链全景图 稀土产业链全景图 电子竞技产业链全景图 钛白粉产…

Lettuce 实战之连接超时问题

问题 使用lettuce作为redis连接池,在访问redis时,偶尔会抛出RedisCommandTimeoutException,但隔一会儿又好了。 为什么lettuce有自动重连机制,却还是会出现连接超时的问题?为什么lettuce在连接断掉后,没有立即重连,而是需要等待十多分钟才重新连接? 在lettuce client和…

开源医疗大模型排行榜: 健康领域大模型基准测试

多年来,大型语言模型 (LLMs) 已经发展成为一项具有巨大潜力,能够彻底改变医疗行业各个方面的开创性技术。这些模型,如 GPT-3,GPT-4 和 Med-PaLM 2,在理解和生成类人文本方面表现出了卓越的能力,使它们成为处理复杂医疗任务和改善病人护理的宝贵工具。它们在多种医疗应用中…

一个用Python将视频变为表情包的工具

这是一个将视频转变为表情包的工具,现实生活中当我们看到一段搞笑的视频,我们可以将这段视频喂给这段程序,生成gif表情包,这样就可以用来舍友斗图了 1、一些限制 1、这个程序不能转化超过15秒以上的视频,因为占用的内存较高,会被终端杀死(除非你的计算机性能很好,也许1…

SpringBoot2.x整合Redis Sentinel

redis sentinel搭建之后,在spring-boot项目中集成。 配置 在pom.xml文件中添加如下依赖配置(这里spring-boot版本2.2.5),这个版本中,默认使用lettuce作为redis连接池。 <dependency><groupId>org.springframework.boot</groupId><artifactId>spri…

PLC程序中的配方应用

建立ARRAYDB集合配方需要的所有元素结构,组成一个UDT(包含范围最全) 新建一组ARRAY DB,元素的个数就是配方需要的副本的个数 数组DB勾选仅存储在装载内存中,以便数据量大的配方不占用数据工作存储器空间,节省资源 在ARRAY DB的起始值处填写配方的具体值 1200不支持ARRAY …

Redis 高可用之主从哨兵集群实战

搭建集群 架构规划为一个主库节点,一个从库节点,三个哨兵节点,其中主从库节点内存配置需保持一致,哨兵节点对配置要求较低,可配置在主从节点上。 搭建主库 主从库节点内存配置需保持一致,主从库连接密码保持一致。主库不进行任何持久化配置,交给从库完成。 编写配置文件…