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

aravis,camera,features · 浏览次数 : 0

小编点评

**目录简介** 该目录介绍了使用Aravis API获取相机基本设置的示例代码,其中包含两个函数:`arv_camera_get_integer` 和 `arv_camera_get_string`。 **`arv_camera_get_integer` 函数** 该函数使用 `arv_camera_get_integer` 和 `GError` 来获取已连接相机的一个整数值特性的值。 ```c int arv_camera_get_integer (ArvCamera *camera, const char *feature, GError **error) ``` **`arv_camera_get_string` 函数** 该函数使用 `arv_camera_get_string` 和 `GError` 来获取已连接相机的一个字符串特性的值。 ```c const char *arv_camera_get_string (ArvCamera *camera, const char *feature, GError **error) ``` **函数说明** **`arv_camera_get_integer`** * 使用 `arv_camera_get_integer` 获取与字符串 `feature` 相同的整数值。 * 如果 `feature` 是空字符串,则返回 `NULL`。 * 如果获取成功,将值存储在 `width` 和 `height` 中。 * 如果获取失败,将错误信息存储在 `error` 中。 **`arv_camera_get_string`** * 使用 `arv_camera_get_string` 获取与字符串 `feature` 相同的字符串值。 * 如果 `feature` 是空字符串,则返回 `NULL`。 * 如果获取成功,将值存储在 `pixel_format` 中。 * 如果获取失败,将错误信息存储在 `error` 中。 **总结** 这些两个函数提供了用于获取相机基本设置的便捷方法。 `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

与开源相机管理库Aravis例程学习(六)——camera-features相似的内容:

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

目录简介例程代码函数说明arv_camera_get_integerarv_camera_get_string 简介 本文针对官方例程中的:04-camera-features做简单的讲解。并介绍其中调用的arv_camera_get_integer,arv_camera_get_string。 a

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

目录简介例程代码函数说明arv_camera_get_regionarv_camera_get_pixel_format_as_stringarv_camera_get_pixel_formatARV_PIXEL_FORMAT_BIT_PER_PIXEL 简介 本文针对官方例程中的:03-camer

开源相机管理库Aravis例程学习(四)——multiple-acquisition-signal

目录简介例程代码函数说明g_main_loop_newg_main_loop_rung_main_loop_quitg_signal_connectarv_stream_set_emit_signalsQ&A回调函数的同步调用与异步调用帧丢失问题 简介 本文针对官方例程中的:02-multiple-

从零在win10上测试whisper、faster-whisper、whisperx在CPU和GPU的各自表现情况

Anaconda是什么? Anaconda 是一个开源的 Python 发行版本,主要面向数据科学、机器学习和数据分析等领域。它不仅包含了 Python 解释器本身,更重要的是集成了大量的用于科学计算、数据分析和机器学习相关的第三方库,并且提供了一个强大的包管理和环境管理工具——Conda。 通过C

驱动开发:内核文件读写系列函数

在应用层下的文件操作只需要调用微软应用层下的`API`函数及`C库`标准函数即可,而如果在内核中读写文件则应用层的API显然是无法被使用的,内核层需要使用内核专有API,某些应用层下的API只需要增加Zw开头即可在内核中使用,例如本章要讲解的文件与目录操作相关函数,多数ARK反内核工具都具有对文件的管理功能,实现对文件或目录的基本操作功能也是非常有必要的。

记 Codes 开源免费研发管理平台 —— 日报与工时融合集中式填报的创新实现

市面上所有的研发管理软件,大多都有工时相关功能,但是却没有日报功能,好像也没什么问题,但是在使用过程中体验非常不好,为什么呢? 项目管理对于基层工作人员来说,主要解决这三个问题:开展我的工作、协作我们的工作和汇报我的工作,也就是说日常的汇报也是刚需。平台没有日报就会有下面的问题。 第一、如果离开平台...

20.1K Star!Notion的开源替代方案:AFFiNE

Notion这款笔记软件相信很多开发者都比较熟悉了,很多读者,包括我自己都用它来记录和管理自己的笔记。今天给大家推荐一个最近比较火的开源替代方案:AFFiNE。目前该开源项目已经斩获20.1K Star,热度非常的高,下面一起来认识一下这个继Notion之后,被热捧的开源软件吧。 ![](https

成为钢铁侠!只需一块RTX3090,微软开源贾维斯(J.A.R.V.I.S.)人工智能AI助理系统

梦想照进现实,微软果然不愧是微软,开源了贾维斯(J.A.R.V.I.S.)人工智能助理系统,贾维斯(jarvis)全称为Just A Rather Very Intelligent System(只是一个相当聪明的人工智能系统),它可以帮助钢铁侠托尼斯塔克完成各种任务和挑战,包括控制和管理托尼的机甲装备,提供实时情报和数据分析,帮助托尼做出决策等等。 如今,我们也可以拥有自己的贾维斯人工智能助理

Docker V24 及 Docker Compose V2 的安装及使用

Docker 是一款流行的开源容器化平台,使用 Docker 可以有效地隔离应用程序和系统环境,使得应用程序在不同的环境中具有相同的行为 Docker Compose 是一个用于定义和管理多个容器工具

基于.NetCore开发博客项目 StarBlog - (28) 开发友情链接相关接口

## 前言 之前介绍的友情链接功能,只实现了友情链接的展示和管理接口。 还缺失友情链接申请、审核管理、通知,现在把这块功能补全。 Model 什么的之前那篇文章都有,本文直接补全逻辑代码~ 详见: [基于.NetCore开发博客项目 StarBlog - (13) 加入友情链接功能](https:/