首页 > 其他分享 >开源相机管理库Aravis学习——PixelFormat编码规则

开源相机管理库Aravis学习——PixelFormat编码规则

时间:2024-04-28 13:57:17浏览次数:14  
标签:FORMAT 开源 Aravis 像素 PixelFormat 图像 PIXEL

目录

前言

在学习Aravis官方例程的时候,有这么一个函数:arv_camera_get_pixel_format,它的返回类型是ArvPixelFormat(本质是个32位无符号整数)。这意味着对于每个图像数据格式,都有自己对应的唯一的编码。我比较好奇Aravis是通过什么规则对各种图像数据格式进行的编码,于是就查看了源码。

本文主要讨论Aravis中对不同图像数据格式的编码规则。

前置知识

PixelFormat

PixelFormat指的是图像中每个像素的数据格式,它定义了图像中像素的组成方式、颜色信息的存储方法和每个像素所占的位数等。这一格式对于图像的处理和显示是非常关键的,因为它直接影响到图像的质量和处理的效率。

常见的PixelFormat有:Mono8,BayerGB8,BayerGB10等。

Bpp

在工业相机中,Bpp通常指的是"bits per pixel",它描述了存储每个像素所需的位数。这个值决定了图像的颜色深度以及可能包含的信息量。例如:

  • Bpp8: 每个像素使用8位表示,常用于灰度图像,可以显示256种灰度级别。
  • Bpp16: 每个像素使用16位,可以是更深的灰度图,或者是用于存储彩色图像的颜色分量之一(如在某些彩色格式中,红色、绿色和蓝色每个分量可能各占16位)。
  • Bpp24 或 Bpp32: 这通常用于彩色图像,其中每个颜色分量(红、绿、蓝)各占8位,32位图像格式可能会包含一个额外的8位用于透明度(alpha通道)。

在工业成像应用中,Bpp的选择对于图像质量和处理效率非常重要,因为它直接影响图像的细节和色彩表达。高Bpp值允许图像包含更多的颜色和亮度级别,从而提供更精确的视觉数据,但也意味着更大的数据大小和处理需求。

编码规则

源码

像素格式指定了图像中每个像素应该如何表示,包括每个像素的组件数量和每个组件的位数等。在Aravis中通过编码可以清晰的表示图像数据的颜色和位深信息,部分定义如下:

//file: arvenums.h
/* Grey pixel formats */
#define	ARV_PIXEL_FORMAT_MONO_8			((ArvPixelFormat) 0x01080001u)
#define ARV_PIXEL_FORMAT_BAYER_GR_8		((ArvPixelFormat) 0x01080008u)

/* Color pixel formats */
#define ARV_PIXEL_FORMAT_RGB_8_PACKED		((ArvPixelFormat) 0x02180014u)

/* Custom */
#define ARV_PIXEL_FORMAT_CUSTOM_BAYER_GR_12_PACKED  	((ArvPixelFormat) 0x810c0001u)

分析

对于每个PixelFormat,都有唯一一个32位的无符号整数与之对应。

以Mono8为例,其对应的32位无符号整数为:0x01080001,我们从高位向低位看:

  • 0x01:对像素格式的一个分类,Aravis中共分为三类,对应的编号为0x010x020x08。具体的分类准则在后面讨论;
  • 0x08:表示当前PixelFormat对应的Bpp,0x08就对应Bpp8;
  • 0x0001:为像素格式设定的序号。

分类标准

之前本来还想自己推断一下Aravis中对PixelFormat的分类依据,后来我查资料时看到了GenICam Pixel Format Names and Values,这应该是相当于EMVA规定的一个准则吧。对比源码可以发现,Aravis中0x010x02开头的PixelFormat对应的值就是遵循的这个文件的内容。

0x010x02的差别估计就是一个像素点对应的通道数量不同,0x01表示一个像素点上只有一个通道,0x02表示一个像素点上的通道数大于1。至于0x08,应该是Aravis自己定义的一些格式,具体的作用目前不太清楚。

补充

ARV_PIXEL_FORMAT_BIT_PER_PIXEL

在arvenums.h中还定义了一个宏,用于获取像素格式的Bpp:

#define ARV_PIXEL_FORMAT_BIT_PER_PIXEL(pixel_format) (((pixel_format) >> 16) & 0xff)

以Mono8为例,其值为0x01080001,右移16位并与上0xff,获取到第17位到32位:0x08。对应的Bpp就可以被正确解析出来,为8。

参考文章

1.GenICam_SFNC_v2_5
2.GenICam_PFNC_v2_4
3.GenICam Pixel Format Names and Values

标签:FORMAT,开源,Aravis,像素,PixelFormat,图像,PIXEL
From: https://www.cnblogs.com/paw5zx/p/18163602

相关文章

  • 开源相机管理库Aravis例程学习(五)——camera-api
    目录简介例程代码函数说明arv_camera_get_regionarv_camera_get_pixel_format_as_stringarv_camera_get_pixel_formatARV_PIXEL_FORMAT_BIT_PER_PIXEL简介本文针对官方例程中的:03-camera-api做简单的讲解。并介绍其中调用的arv_camera_get_region,arv_camera_get_pixel_format_as......
  • OLAP开源引擎对比之历史概述
    前言OLAP概念诞生于1993年,工具则出现在更早以前,有史可查的第一款OLAP工具是1975年问世的Express,后来走进千家万户的Excel也可归为此类,所以虽然很多数据人可能没听过OLAP,但完全没打过交道的应该很少。这个概念主要是在大数据圈里流传,而在大数据领域里,目前主流的OLAP开源引擎都诞......
  • qt 使用hid开源库 ,搜索所有的hid设备
    效果:  cmakeLists.txt:cmake_minimum_required(VERSION3.5)project(TF_Hid_UseANDTestVERSION0.1LANGUAGESCXX)set(CMAKE_AUTOUICON)set(CMAKE_AUTOMOCON)set(CMAKE_AUTORCCON)set(CMAKE_CXX_STANDARD17)set(CMAKE_CXX_STANDARD_REQUIREDON)file(G......
  • 总结反思 持续进步-开源即时通讯(IM)项目OpenIM 新版本release-v3.7发布
    背景过去,我们团队对开源项目的认知较浅,过分追求进度,而忽视了代码的质量和规范。这导致了一些问题,例如部署流程设计不当:流程复杂、不规范,以及Mac与Windows部署的明显缺陷。这些问题不仅给开发者带来了困扰,也增加了社区维护的难度。针对这些挑战,我们团队进行了深刻的反思并总结出......
  • vllm 通过不同的chat_template推理部署常见qwen、chatglm、llama3等开源大模型
    vllm版本4.0.0镜像vllmgithub官方镜像gpuv10032ga80080gopenaiapi方式出现的问题通过chat-template聊天模板解决1推理部署qwen系列模型测试我是谁问题:回答内容含有分词符,回答有杂论冗余内容模型文件没有默认聊天模板vllm官方也没有聊天模板找不到不过......
  • .net开源智能家居之小米米家的c#原生sdk【MiHome.Net】1.0.0发布
    背景介绍hi大家好,我是三合,作为一个非著名懒人,智能家居简直刚需,在上一篇文章他来了他来了,.net开源智能家居之苹果HomeKit的c#原生sdk【Homekit.Net】1.0.0发布,快来打造你的私人智能家居吧中有靓仔提到,没有苹果设备,有一说一,苹果手机很贵,并且原生支持苹果HomeKit的智能家居设备......
  • 他又来了,.net开源智能家居之小米米家的c#原生sdk【MiHome.Net】1.0.0发布,快来打造你的
    背景介绍hi大家好,我是三合,作为一个非著名懒人,智能家居简直刚需,在上一篇文章他来了他来了,.net开源智能家居之苹果HomeKit的c#原生sdk【Homekit.Net】1.0.0发布,快来打造你的私人智能家居吧中有靓仔提到,没有苹果设备,有一说一,苹果手机很贵,并且原生支持苹果HomeKit的智能家居设备也......
  • 开源相机管理库Aravis例程学习(四)——multiple-acquisition-signal
    目录简介例程代码函数说明g_main_loop_newg_main_loop_rung_main_loop_quitg_signal_connectarv_stream_set_emit_signalsQ&A回调函数的同步调用与异步调用帧丢失问题简介本文针对官方例程中的:02-multiple-acquisition-signal做简单的讲解。并简单介绍其中调用的g_main_loop_new......
  • 「白嫖」开源的后果就是供应链攻击么?| 编码人声
      「编码人声」是由「RTE开发者社区」策划的一档播客节目,关注行业发展变革、开发者职涯发展、技术突破以及创业创新,由开发者来分享开发者眼中的工作与生活。 面对网络安全威胁日益严重的今天,软件供应链安全已经成为开发者领域无法避免的焦点。从令人瞠目的ApacheLog4j......
  • 苹果开源高效语言模型 OpenELM;全球首个 AI 基因编辑器开源丨RTE 开发者日报 Vol.192
       开发者朋友们大家好: 这里是「RTE开发者日报」,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享RTE(RealTimeEngagement)领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、「有看点的会议」,但内容仅代表编......