目录
1. 简介
在《Vitis Accelerated Libraries 学习笔记--OpenCV 安装指南-优快云博客》一文中,我详尽地介绍了 OpenCV 的安装过程。尽管 Vitis Vision 库的实现本身并不依赖于 OpenCV,但要运行库中的示例设计,OpenCV 是必需的。此外,在用户的测试平台上验证算法时,也可能会用到 OpenCV。在本文中,我们将深入探讨如何有效地利用 OpenCV 库来执行测试,确保您的设计能够在实际环境中达到预期的性能。
本文基于你了解 OpenCV 库的基本功能和它在图像处理和计算机视觉中的应用,然后,我会详细说明如何将 OpenCV 集成到 Vitis Vision 库的工作流中,以及如何使用 OpenCV 提供的函数来创建测试用例和验证设计。
2. 实例测试
2.1 实例介绍
以 Vitis Vision Library 中的 resize 内核为例,它的主要功能是执行图像的缩放操作。在 Vitis_Libraries/vision/L1/tests/resize/ 目录下,你会发现一系列文件夹,这些文件夹代表了不同的测试用例,用于验证和展示 resize 内核的功能:
- resize_NPPC1_8UC1_8UC1_AREA
- resize_NPPC1_8UC1_8UC1_BILINEAR
- resize_NPPC1_8UC1_8UC1_NN
- resize_NPPC1_8UC3_8UC3_AREA
- resize_NPPC1_8UC3_8UC3_BILINEAR
- resize_NPPC1_8UC3_8UC3_NN
- resize_NPPC8_8UC1_8UC1_AREA
- resize_NPPC8_8UC1_8UC1_BILINEAR
- resize_NPPC8_8UC1_8UC1_NN
- resize_NPPC8_8UC3_8UC3_AREA
- resize_NPPC8_8UC3_8UC3_BILINEAR
- resize_NPPC8_8UC3_8UC3_NN
我们先来了解一下这些文件夹的命名含义:
- NPPC1 或 NPPC8: 这代表每个像素时钟周期(Number of Pixels Per Clock)的数量。NPPC1 表示每个时钟周期处理一个像素,而 NPPC8 表示每个时钟周期处理八个像素。
- 8UC1 或 8UC3: 这指的是图像的类型。8UC1 表示 8 位无符号单通道图像,而 8UC3 表示 8 位无符号三通道图像。
- AREA, BILINEAR, NN: 这些是 resize 函数使用的不同插值方法。AREA 是面积插值,BILINEAR 是双线性插值,NN 是最近邻插值。
最近邻插值(Nearest Neighbor, NN): 这是最简单的插值方法。它选择最接近目标位置的源像素值来填充目标像素。这种方法的计算速度快,但可能会导致图像在放大时出现块状效果。
双线性插值(Bilinear): 双线性插值考虑了最近的四个像素点,并基于它们的距离,计算加权平均值来确定新像素的值。这种方法比最近邻插值平滑,但在某些情况下可能会引入模糊。
面积插值(Area): 面积插值是一种更复杂的方法,它考虑了源图像中多个像素的区域,并计算这些像素的平均值来确定目标像素的值。这种方法在缩小图像时特别有用,因为它可以减少混叠效应,通常能得到更平滑的结果。每种方法都有其优点和适用场景。最近邻插值适合对计算速度要求高的场合,双线性插值在保持图像细节的同时提供了平滑的效果,而面积插值则在减少图像缩小时的失真方面表现出色。选择哪种插值方法取决于具体的应用需求和预期的图像质量。
2.2 创建工程
通过 cmd 和 GUI 混合操作(实操下来,这个方法最容易理解)。