跳至内容
深圳市捷比信实业有限公司 · 产品选型与采购咨询联系业务人员
高频电阻捷比信 · 专业器件主题站

适用于计算机视觉应用程序的OpenCV基本教程

从工业检查系统到自动驾驶系统,计算机视觉是一个广泛的领域,其中包括许多有趣的应用程序。这些系统中的许多系统在原型和实施阶段都使用开源计算机视觉(OpenCV)。 OpenCV优化了许多功能,并用于实时计算机视觉程序。但是,由于嵌入式优化策略的独特优势,仍然值得尝试使用逻辑硬件来提高OpenCV的性能。目前,OpenCV被广泛用​​于计算机视觉应用程序的开发中。 OpenCV包含一个包含2500多种优化视频功能的库,并且专门针对台式机处理器和图形处理单元(GPU)进行了优化。 Xilinx提供的Vivado HLS高级综合工具可以通过用C / C ++编写的代码直接创建RTL硬件,从而大大提高了设计效率。同时,Xilinx Zynq完全可编程SOC系列器件嵌入在双核ARM Cortex-A9处理器中,以提供软件可编程性。它与FPGA硬件可编程性完美结合,可实现单芯片无与伦比的系统性能,灵活性和可扩展性。系统优势,例如低功耗和低成本,并加快了图形处理产品设计的上市时间。 OpenCV有成千上万的用户,并且OpenCV的设计可以在Zynq设备的ARM处理器上运行,而无需进行修改。但是,OpenCV实施的高清处理通常受外部存储器的限制,特别是存储带宽将成为性能瓶颈,并且存储访问也限制了电源效率。借助Xilinx提供的Vivado HLS高级语言综合工具,设计人员可以轻松地将OpenCV C ++视频处理设计转换为RTL代码,并将其转换为Zynq实现的硬件加速器或FPGA实现的实时硬件视频处理单元。 1. OpenCV和HLS视频库如图15.83所示。 OpenCV可以在视频处理系统中以不同的方式使用。在图15.83(a)中,算法的设计和实现完全依赖于OpenCV函数调用,使用文件访问函数进行图像输入,输出和处理。在图15.83(b)中,该算法可以在嵌入式系统中使用(例如,在Zynq Base TRD中实现),该嵌入式系统使用特定平台的函数调用来访问输入和输出图像。但是,视频处理的实现取决于嵌入式系统中处理器(例如,Cortex& trade-A9)对OpenCV功能函数的调用。在图15.83中的(c)中,处理算法的OpenCV函数被Xilinx Vivado HLS视频库函数代替,并且OpenCV函数用于访问输入和输出图像,并提供了用于实现视频的设计原型。处理算法。 Vivado HLS提供的视频库功能可以合成。在综合了这些功能之后,可以将处理程序模块集成到诸如Zynq的可编程逻辑中。这样,这些程序逻辑块可以处理处理器产生的视频流,从文件读取的数据以及从外部输入的实时视频流。图15.83 OpenCV应用程序的不同方式Vivado HLS包含大量视频库功能,可方便地构建各种视频处理程序。通过可综合的C ++代码,可以实现这些视频库功能。在视频处理功能和数据结构方面,这些集成代码基本上对应于OpenCV。许多视频概念与抽象和OpenCV非常相似,并且许多图像处理模块功能与OpenCV库功能一致。例如,用于表示OpenCV中图片的一个非常重要的类是cv :: Mat类。 cv :: Mat对象的定义如下:cv :: Mat image(1080,1920,CV_8UC3);这行代码声明了1080& TImes; 1920个像素,每个像素都是由三个8位无符号数字表示的可变图像。相应的HLS视频库模板类hls :: Mat& lt;声明如下:hls :: Mat< 2047,2047,HLS_8UC3>图片(1080,1920);两行代码的参数形式,最大图像大小和语法规则不同,生成的对象相似。如果指定的图像最大尺寸与图像的实际尺寸相同,则也可以改用以下代码:hls :: Mat< 1080、1920,HLS_8UC3& gt;图像( );表15.14给出了简单的图像转换函数应用程序比较(函数实现dst = src * 2.0 + 0.0)。表15.15和表15.16显示了OpenCV和HLS视频库以及HLS视频库的核心结构。 2. AXI4流和视频接口通过AXI4流协议,视频处理模块实现像素数据通信