OpenVX官方文档阅读四---Basic Features

4.1 数据结构

4.1.1 vx_coordinates2d_t

二维坐标结构

typedef struct _vx_coordinates2d_t {
	vx_uint32	x;
	vx_uint32	y;
} vx_coordinates2d_t;

4.1.2 vx_coordinates2df_t

浮点2D坐标结构

typedef struct _vx_coordinates2df_t {
	vx_float32	x;
	vx_float32	y;
} vx_coordinates2df_t;

4.1.3 vx_coordinates3d_t

三维坐标结构

typedef struct _vx_coordinates3d_t {
	vx_uint32	x;
	vx_uint32	y;
	vx_uint32	z;
} vx_coordinates3d_t;

4.1.4 vx_keypoint_t

关键点数据结构

typedef struct _vx_keypoint_t {
	vx_uint32	x;
	vx_uint32	y;
	vx_float32	strength;
	vx_float32	scale;
	vx_float32	orientation;
	vx_int32	tracking_status;
	vx_float32	error;
} vx_keypoint_t;

x,y分别为x轴和y轴坐标。
strength:当前关键点的强度。它的定义是基于角检测器的
scale:被角检测器初始化为0。
orientation:被角检测器初始化为0。
tracking_status:一个0表示一个丢失的点,被角检测器初始化为1 。
error:一个跟踪方法的具体误差。被角检测器初始化为0;

4.1.5 vx_line2d_t

线结构

typedef struct _vx_line2d_t {
    vx_float32    start_x;
    vx_float32    start_y;
    vx_float32    end_x;
    vx_float32    end_y;
} vx_line2d_t;

4.1.6 vx_rectangle_t

与用户共享的矩形数据结构。

tepedef struct _vx_rectangle_t {
	vx_uint32	start_x;
	vx_uint32	start_y;
	vx_uint32	end_x;
	vx_uint32	end_y;
} vx_rectangle_t;

4.2 Macros 宏命令

4.2.1 VX_ATTRIBUTE_BASE

定义组合供应商id和对象id以获取枚举基值的方式。

#define VX_ATTRIBUTE_BASE(vender,object)(((vendor)<<20) | (object<<8))

4.2.2 VX_ATTRIBUTE_ID_MASK

4.2.3. VX_DF_IMAGE

4.2.4 VX_ENUM_BASE

定义组合供应商ID和对象ID一获取枚举基值的方式。

#define VX_ENUM_BASE(verdor,id)(((vendor)<<20)|(id<<12))

从任何枚举值(有例外情况)中,供应商和枚举类型都应该是可提取的。例外的类型包括vx_vendor_id_e,vx_type_e,vx_enum_e,vx_df_image_e和vx_bool

…更多宏命令见官方文档

4.3 Typedefs

vx_bool
vx_char
vx_enum:将标准枚举类型大小设置为固定数量
vx_float32 32位有符号值
vx_float64 64位有符号值
vx_int8 8位有符号值
vx_size szie_t的一个包装,以保持统一命名约定
vx_status 已知固定大小的正式状态类型
vx_uint16 16位的无符号值
vx_uint32/64/8

4.4 Enumerations(枚举)

vx_bool_e:布尔值

enum vx_bool_e{
	vx_flase_e = 0;
	vx_true_e = 1;
};

vx_bool ret = vx_true_e;
if(ret) printf("true!\n");
ret = vx_flase_e;
if(ret) print("flase!\n");

vx_channel_e:用于通道提取的通道枚举。

enum vx_channel_e {
	VX_CHANNEL_0 = VX_ENUM_BASE(VX_ID_KHROMOS,VX_ENUM_CHANNEL) + 0x0, //用于未知通道类型的格式
	VX_CHANNEL_1 = VX_ENUM_BASE(VX_ID_KHROMOS,VX_ENUM_CHANNEL) + 0x1,
	VX_CHANNEL_2 = VX_ENUM_BASE(VX_ID_KHROMOS,VX_ENUM_CHANNEL) + 0x2,
	VX_CHANNEL_3 = VX_ENUM_BASE(VX_ID_KHROMOS,VX_ENUM_CHANNEL) + 0x3,
	VX_CHANNEL_R = VX_ENUM_BASE(VX_ID_KHROMOS,VX_ENUM_CHANNEL) + 0x10,	//用于提取RED通道,无论字节或封装顺序如何。
	VX_CHANNEL_G = VX_ENUM_BASE(VX_ID_KHROMOS,VX_ENUM_CHANNEL) + 0x11,
	VX_CHANNEL_B = VX_ENUM_BASE(VX_ID_KHROMOS,VX_ENUM_CHANNEL) + 0x12,
	VX_CHANNEL_A = VX_ENUM_BASE(VX_ID_KHROMOS,VX_ENUM_CHANNEL) + 0x13,	//	alpha通道,用于衡量一个像素或者图像的透明度。在非压缩的32位RGB图像中,每个像素是由四个部分组成:一个aplha通道和RGB。alpha=0时,像素完全透明,=255时,像素完全不透明。
	VX_CHANNEL_Y = VX_ENUM_BASE(VX_ID_KHROMOS,VX_ENUM_CHANNEL) + 0x14,	//LUMA通道,亮度
	VX_CHANNEL_U = VX_ENUM_BASE(VX_ID_KHROMOS,VX_ENUM_CHANNEL) + 0x15,	// Cb/U通道
	VX_CHANNEL_V = VX_ENUM_BASE(VX_ID_KHROMOS,VX_ENUM_CHANNEL) + 0x16,	//	Cr/V/Value通道,
};

4.4.3. vx_convert_policy_e

enum vx_convert_policy_e {
    VX_CONVERT_POLICY_WRAP = VX_ENUM_BASE(VX_ID_KHRONOS, VX_ENUM_CONVERT_POLICY) + 0x0,
    VX_CONVERT_POLICY_SATURATE = VX_ENUM_BASE(VX_ID_KHRONOS, VX_ENUM_CONVERT_POLICY) + 0x1,
};

VX_CONVERT_POLICY_WRAP - Results are the least significant bits of the output operand, as if stored in two’s complement binary format in the size of its bit-depth.
VX_CONVERT_POLICY_SATURATE - Results are saturated to the bit depth of the output operand.

4.4.4. vx_df_image_e

enum vx_df_image_e {
	VX_DF_IMAGE_VIRT = VX_DF_IMAGE('V','I','R','T'),	//未定义类型的虚拟图像
	VX_DF_IMAGE_RGB = VX_DF_IMAGE('R','G','B','2'),		//一个24位像素的单一平面,作为R - G - B数据的3个交错的8位单位。
    VX_DF_IMAGE_RGBX = VX_DF_IMAGE('R','G','B','A'),	//一个32位像素的单一平面作为4个交错的8位单位的R, G, B数据
    VX_DF_IMAGE_NV12 = VX_DF_IMAGE('N','V','1','2'),	//2面YUV格式的Luma (Y)和交错UV数据在4:2:0采样。
    VX_DF_IMAGE_NV21 = VX_DF_IMAGE('N','V','2','1'),	//2面YUV格式的Luma (Y)和交错VU数据在4:2:0采样
    VX_DF_IMAGE_UYVY = VX_DF_IMAGE('U','Y','V','Y'),	//单个平面的U0,Y0,V0,Y1字节的32位宏像素
    VX_DF_IMAGE_YUYV = VX_DF_IMAGE('Y','U','Y','V'),
    VX_DF_IMAGE_IYUV = VX_DF_IMAGE('I','Y','U','V'),	//一个8位4:2:0的3平面采样Y, U, V平面。
    VX_DF_IMAGE_YUV4 = VX_DF_IMAGE('Y','U','V','4'),
    VX_DF_IMAGE_U1 = VX_DF_IMAGE('U','0','0','1'),
    VX_DF_IMAGE_U8 = VX_DF_IMAGE('U','0','0','8'),
    VX_DF_IMAGE_U16 = VX_DF_IMAGE('U','0','1','6'),
    VX_DF_IMAGE_S16 = VX_DF_IMAGE('S','0','1','6'),
    VX_DF_IMAGE_U32 = VX_DF_IMAGE('U','0','3','2'),
    VX_DF_IMAGE_S32 = VX_DF_IMAGE('S','0','3','2'),
}

4.4.5. vx_enum_e

OpenVX中支持的枚举集合

enum vx_enum_e {
    VX_ENUM_DIRECTION = 0x00,
    VX_ENUM_ACTION = 0x01,
    VX_ENUM_HINT = 0x02,
    VX_ENUM_DIRECTIVE = 0x03,
    VX_ENUM_INTERPOLATION = 0x04,
    VX_ENUM_OVERFLOW = 0x05,
    VX_ENUM_COLOR_SPACE = 0x06,
    VX_ENUM_COLOR_RANGE = 0x07,
    VX_ENUM_PARAMETER_STATE = 0x08,
    VX_ENUM_CHANNEL = 0x09,
    VX_ENUM_CONVERT_POLICY = 0x0A,
    VX_ENUM_THRESHOLD_TYPE = 0x0B,
    VX_ENUM_BORDER = 0x0C,
    VX_ENUM_COMPARISON = 0x0D,
    VX_ENUM_MEMORY_TYPE = 0x0E,
    VX_ENUM_TERM_CRITERIA = 0x0F,
    VX_ENUM_NORM_TYPE = 0x10,
    VX_ENUM_ACCESSOR = 0x11,
    VX_ENUM_ROUND_POLICY = 0x12,
    VX_ENUM_TARGET = 0x13,
    VX_ENUM_BORDER_POLICY = 0x14,
    VX_ENUM_GRAPH_STATE = 0x15,
    VX_ENUM_NONLINEAR = 0x16,
    VX_ENUM_PATTERN = 0x17,
    VX_ENUM_LBP_FORMAT = 0x18,
    VX_ENUM_COMP_METRIC = 0x19,
    VX_ENUM_SCALAR_OPERATION = 0x20,
};

4.4.6. vx_interpolation_type_e

enum vx_interpolation_type_e {
    VX_INTERPOLATION_NEAREST_NEIGHBOR = VX_ENUM_BASE(VX_ID_KHRONOS, VX_ENUM_INTERPOLATION) + 0x0,
    VX_INTERPOLATION_BILINEAR = VX_ENUM_BASE(VX_ID_KHRONOS, VX_ENUM_INTERPOLATION) + 0x1,
    VX_INTERPOLATION_AREA = VX_ENUM_BASE(VX_ID_KHRONOS, VX_ENUM_INTERPOLATION) + 0x2,
};

4.4.7. vx_non_linear_filter_e

非线性滤波函数的枚举。

enum vx_non_linear_filter_e {
    VX_NONLINEAR_FILTER_MEDIAN = VX_ENUM_BASE(VX_ID_KHRONOS, VX_ENUM_NONLINEAR) + 0x0,
    VX_NONLINEAR_FILTER_MIN = VX_ENUM_BASE(VX_ID_KHRONOS, VX_ENUM_NONLINEAR) + 0x1 ,
    VX_NONLINEAR_FILTER_MAX = VX_ENUM_BASE(VX_ID_KHRONOS, VX_ENUM_NONLINEAR) + 0x2,
};

4.4.8vx_pattern_e

矩阵模式的枚举。参见vxCreateMatrixFromPattern和vxCreateMatrixFromPatternAndOrigin

enum vx_pattern_e {
    VX_PATTERN_BOX = VX_ENUM_BASE(VX_ID_KHRONOS, VX_ENUM_PATTERN) + 0x0,	//箱模式矩阵
    VX_PATTERN_CROSS = VX_ENUM_BASE(VX_ID_KHRONOS, VX_ENUM_PATTERN) + 0x1 	//	交叉模式矩阵
    VX_PATTERN_DISK = VX_ENUM_BASE(VX_ID_KHRONOS, VX_ENUM_PATTERN) + 0x2,	//正方形矩阵
    VX_PATTERN_OTHER = VX_ENUM_BASE(VX_ID_KHRONOS, VX_ENUM_PATTERN) + 0x3,	//除上述模式外的任何模式的矩阵。
};

4.4.9. vx_status_e

所有状态码的枚举

enum vx_status_e {
    VX_STATUS_MIN = -25,
    VX_ERROR_REFERENCE_NONZERO = -24,
    VX_ERROR_MULTIPLE_WRITERS = -23,
    VX_ERROR_GRAPH_ABANDONED = -22,
    VX_ERROR_GRAPH_SCHEDULED = -21,
    VX_ERROR_INVALID_SCOPE = -20,
    VX_ERROR_INVALID_NODE = -19,
    VX_ERROR_INVALID_GRAPH = -18,
    VX_ERROR_INVALID_TYPE = -17,
    VX_ERROR_INVALID_VALUE = -16,
    VX_ERROR_INVALID_DIMENSION = -15,
    VX_ERROR_INVALID_FORMAT = -14,
    VX_ERROR_INVALID_LINK = -13,
    VX_ERROR_INVALID_REFERENCE = -12,
    VX_ERROR_INVALID_MODULE = -11,
    VX_ERROR_INVALID_PARAMETERS = -10,
    VX_ERROR_OPTIMIZED_AWAY = -9,
    VX_ERROR_NO_MEMORY = -8,
    VX_ERROR_NO_RESOURCES = -7,
    VX_ERROR_NOT_COMPATIBLE = -6,
    VX_ERROR_NOT_ALLOCATED = -5,
    VX_ERROR_NOT_SUFFICIENT = -4,
    VX_ERROR_NOT_SUPPORTED = -3,
    VX_ERROR_NOT_IMPLEMENTED = -2,
    VX_FAILURE = -1,
    VX_SUCCESS =  0,
};

vx_target_e、vx_type_e、vx_vendor_id_e

翻译自官方文档第四章:https://registry.khronos.org/OpenVX/specs/1.3.1/html/OpenVX_Specification_1_3_1.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值