openvx 6: 高级框架API

主要是一些被认为是高级操作的api介绍,包括:

1 Framework:Node Callbacks(节点回调)

允许在特定节点执行完毕后去调用回调函数;无法保证节点完成后立即执行回调,回调旨在使用返回值为视觉图创建简单的提前退出条件;设置回调的示例如下:

vx_graph graph = vxCreateGraph(context);
status = vxGetStatus((vx_reference)graph);
if (status == VX_SUCCESS) {
    vx_uint8 lmin = 0, lmax = 0;
    vx_uint32 minCount = 0, maxCount = 0;
    vx_scalar scalars[] = {
        vxCreateScalar(context, VX_TYPE_UINT8, &lmin),
        vxCreateScalar(context, VX_TYPE_UINT8, &lmax),
        vxCreateScalar(context, VX_TYPE_UINT32, &minCount),
        vxCreateScalar(context, VX_TYPE_UINT32, &maxCount),
    };
    vx_array arrays[] = {
        vxCreateArray(context, VX_TYPE_COORDINATES2D, 1),
        vxCreateArray(context, VX_TYPE_COORDINATES2D, 1)
    };
    vx_node nodes[] = {
        vxMinMaxLocNode(graph, input, scalars[0], scalars[1], arrays[0], arrays[1], scalars[2], scalars[3]),
        /// other nodes
    };
    status = vxAssignNodeCallback(nodes[0], &analyze_brightness);
    // do other
}

若像上面这样建图时注册了回调,那么回调函数将会在图执行期间被调用。

#define MY_DESIRED_THRESHOLD (10)
vx_action analyze_brightness(vx_node node) {
    // extract the max value
    vx_action action = VX_ACTION_ABANDON;
    vx_parameter pmax = vxGetParameterByIndex(node, 2); // Max Value
    if (pmax) {
        vx_scalar smax = 0;
        vxQueryParameter(pmax, VX_PARAMETER_REF, &smax, sizeof(smax));
        if (smax) {
            vx_uint8 value = 0u;
            vxCopyScalar(smax, &value, VX_READ_ONLY, VX_MEMORY_TYPE_HOST);
            if (value >= MY_DESIRED_THRESHOLD) {
                action = VX_ACTION_CONTINUE;
            }
            vxReleaseScalar(&smax);
        }
        vxReleaseParameter(&pmax);
    }
    return action;
}

回调必须返回一个vx_action,图会依据此返回值进行相应的操作:

  • 如果VX_ACTION_CONTINUE返回,则图将无任何变换的继续执行

  • 如果VX_ACTION_ABANDON返回,然后停止图的执行。仅执行将该节点作为支配者的节点(原文为:“execution is unspecified for all nodes for which this node is a dominator. Nodes that are dominators of this node will have executed. Execution of any other node is
    unspecified.” 感觉像是仅继续执行这个node的copy)

带回调的执行序列如图:

 很明显看到,就是特定节点执行之后会调用回调,只有回调执行完毕之后,才会依据返回值的类型继续执行图;

相关的枚举:

enum vx_action_e {
    //继续执行
    VX_ACTION_CONTINUE = VX_ENUM_BASE(VX_ID_KHRONOS, VX_ENUM_ACTION) + 0x0,
    
    //停止图执行
    VX_ACTION_ABANDON = VX_ENUM_BASE(VX_ID_KHRONOS, VX_ENUM_ACTION) + 0x1,
};

相关函数:

vx_status vxAssignNodeCallback(
                                        vx_node node,
                                        vx_nodecomplete_f callback);
将回调函数分配特定的节点,若已经有回调,返回错误;可以通过传递NULL清除已分配的回调
vx_nodecomplete_f vxRetrieveNodeCallback(
                                        vx_node node);
检索当前在节点上设置的回调函数的指针

必须回调执行完毕之后才能继续执行图,图的性能可能会受到影响,所以必须谨慎的使用回调。

2 Framework: Performance Measurement(性能评估)

用来进行性能测试和报告的接口;在openvx中,vx_graph和vx_node对象都有对应的性能信息,可以通过查询函数来获得vx_per_t中的任意一个性能:

vx_perf_t perf;
vxQueryNode(node, VX_NODE_PERFORMANCE, &perf, sizeof(perf));

统计的性能包含:

typedef struct _vx_perf_t {
    //最后一次测量时间
    vx_uint64    tmp;

    //一组测量中的开始时间
    vx_uint64    beg;

    //一组测量中的结束时间
    vx_uint64    end;

    //执行时间的总和
    vx_uint64    sum;

    //执行时间的平
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: OpenVX编程指南PDF是一本非常实用的指南,旨在为需要使用OpenVX库进行图像和视觉处理的开发人员提供指导。OpenVX是一个跨平台的高性能计算机视觉库,它可以让开发人员更轻松地构建图像,视频和视觉信号处理应用程序。 这本指南涵盖了从基础知识到高级应用程序的各种主题,包括OpenVX框架,数据结构,语法和算法。它还提供了有关如何在OpenVX中使用功能块,滤波和其他图像处理工具的详细说明。 无论您是计算机视觉领域的专业人员还是初学者,OpenVX编程指南PDF都可以帮助您更加深入地了解OpenVX,并掌握其基本原理和使用方法。通过仔细学习这些概念和技术,您可以更好地应用OpenVX编程,并将其用于您的项目中。 此外,OpenVX编程指南PDF还包含丰富的实例和代码,可以帮助您更好地理解OpenVX的各种概念和技术,并加快您的开发速度。总之,如果您需要学习OpenVX编程,那么这本指南是您的理想选择。 ### 回答2: OpenVX编程指南(PDF)是一份介绍OpenVX图像处理框架的指南。该框架是一个跨平台的、高度优化的库,旨在提供一系列的函数,使图像、视频和视觉算法的开发变得更加容易。OpenVX框架使用图形计算来加速算法,并提供许多特定领域的算法,包括图像识别、人脸识别、深度学习和目标跟踪等。它具有许多有点,包括简化了编程过程、提高了计算效率、减少了开发时间和硬件开销等。在OpenVX编程指南中,介绍了如何使用OpenVX API和使用OpenVX图形计算框架来构建高效的计算图。此外,该指南提供了丰富的示例代码和代码片段,以便读者可以更好地理解OpenVX API库的功能和使用方式。总之,OpenVX编程指南非常实用和有用,对于想要学习或掌握OpenVX框架的人来说,是一份必备的指南。 ### 回答3: OpenVX编程指南是一本详细的文档,用于指导OpenVX图像处理库的使用和编程。OpenVX库提供了一种高效的图像处理方法,可以帮助开发者轻松地实现复杂的图像处理算法。 这本编程指南包含了OpenVX库的各种特性、数据结构和函数的详细介绍。开发者可以通过这本指南了解OpenVX库的工作原理和实现方式,从而更好地了解如何使用OpenVX库来解决各种图像处理问题。 指南包括了大量的示例代码和详细的说明,使得开发者可以快速上手使用OpenVX库来编写图像处理应用程序。此外,指南中还提供了一些最佳实践和优化技巧,可以帮助开发者编写出更高效和可维护的代码。 总之,OpenVX编程指南是一本非常实用和详细的资料,可以帮助有志于使用OpenVX开发图像处理应用程序的开发者快速掌握相关的知识和技能,从而更好地完成自己的工作。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值