vivado中的IP调用 vivado HLS的帧差图像实现

时间:2025-06-16  作者:Diven  阅读:0

1.帧差法原理
帧差法的实现非常简单:
 

vivado中的IP调用 vivado HLS的帧差图像实现

如图可见,由目标运动引起的运动变化区域包括运动目标在前后两帧中的共同位置(图中黑色区域)、在当前帧中新显露出的背景区域和新覆盖的背景区域三部分。
数学原理:

2.vivado HLS实现

Vivado HSL是xilinx公司推出的高层次综合工具,使用C/C++就能实现传统的verilog语言进行的开发,降低了开发难度,内置的hls视频库实现了基本的opencv函数,直接调用可以实现转换。
(1)打开HLS如下图

(2)创建新工程

(3)一直点击next,出现下图

(4)选择FPGA芯片类型 我的是7020-2

(5)选择完成后如下图

(6)点击finish后,如下图

(7)右键source 选择new file 输入文件名 top.cpp

#include “top.h”

#include “hls_math.h”

void hls_counter_color1(AXI_STREAM_IN& INPUT_STREAM1,

AXI_STREAM_IN& INPUT_STREAM2, AXI_STREAM_OUT& OUTPUT_STREAM, int rows,

int cols) {

#pragma HLS INTERFACE axis port=INPUT_STREAM1

#pragma HLS INTERFACE axis port=INPUT_STREAM2

#pragma HLS INTERFACE axis port=OUTPUT_STREAM

#pragma HLS RESOURCE core=AXI_SLAVE variable=rows metadata=“-bus_bundle CONTROL_BUS”

#pragma HLS RESOURCE core=AXI_SLAVE variable=cols metadata=“-bus_bundle CONTROL_BUS”

#pragma HLS RESOURCE core=AXI_SLAVE variable=return metadata=“-bus_bundle CONTROL_BUS”

#pragma HLS INTERFACE ap_stable port=rows

#pragma HLS INTERFACE ap_stable port=cols

RGB_IMAGE img_01(rows, cols);

RGB_IMAGE img_02(rows, cols);

GRAY_IMAGE img_1(rows, cols);

GRAY_IMAGE img_2(rows, cols);

GRAY_IMAGE img_4(rows, cols);

GRAY_IMAGE img_5(rows, cols);

RGB_IMAGE img_3(rows, cols);

#pragma HLS dataflow

hls::AXIvideo2Mat(INPUT_STREAM1, img_01);

hls::AXIvideo2Mat(INPUT_STREAM2, img_02);

hls::CvtColor(img_01, img_1);

hls::CvtColor(img_02, img_2);

hls::ABSDiff(img_1,img_2,img_4);

hls::Mat2AXIvideo(img_4, OUTPUT_STREAM);

}

(8)继续右键source 选择new file 输入 top.h

#ifndef _TOP_H_

#define _TOP_H_

#include “hls_video.h”

//#include “ap_int.h”

//#include

#define MAX_WIDTH 2048

#define MAX_HEIGHT 1536

#define INPUT_IMAGE1 “a1.jpg”

#define INPUT_IMAGE2 “a2.jpg”

//#define INPUT_IMAGE “test_1080p.bmp”

#define OUTPUT_IMAGE “result_1080p.jpg”

#define OUTPUT_IMAGE_GOLDEN “result_1080p_golden.bmp”

// typedef video library core structures

typedef hls::stream 》 AXI_STREAM_IN;

typedef hls::stream 》 AXI_STREAM_OUT;

typedef hls::Mat RGB_IMAGE;

typedef hls::Mat GRAY_IMAGE;

//顶层综合函数

void hls_counter_color1(AXI_STREAM_IN& src_axi1,AXI_STREAM_IN& src_axi2, AXI_STREAM_OUT& dst_axi, int rows, int cols);

#endif

(9)点击Test Bench 右键 new file 输入文件名 test.cpp

#include “top.h”

#include “hls_opencv.h”

#include “iostream”

using namespace std;

using namespace cv;

const int N = 2;

int main(int argc, char** argv) {

for (int i = 0; i 《 N》//获取图像数据

IplImage* src1 = cvLoadImage(INPUT_IMAGE1);

IplImage* src2 = cvLoadImage(INPUT_IMAGE2);

IplImage* dst1 = cvCreateImage(cvGetSize(src1), 8,1);

AXI_STREAM_IN src_axi1;

AXI_STREAM_IN src_axi2;

AXI_STREAM_OUT dst_axi;

IplImage2AXIvideo(src1, src_axi1);

IplImage2AXIvideo(src2, src_axi2);

hls_counter_color1(src_axi1, src_axi2, dst_axi, src1-》height,

src1-》width);

AXIvideo2IplImage(dst_axi, dst1);

cvSaveImage(OUTPUT_IMAGE, dst1);

//释放内存

cvReleaseImage (&src1);

cvReleaseImage (&src2);

cvReleaseImage (&dst1);

}

}

(10)点击Test Bench 右键 add file 添加两幅运动图像,文件名与top.h中的

#define INPUT_IMAGE1 “a1.jpg”

#define INPUT_IMAGE2 “a2.jpg”

相同

(11)添加顶层文件

右键工程 Project Settings --Synthesis

如上图 点击OK

(12)Solution

选择Active Solution 等待完成 如下图

(13)C Simulation

点击ok 等待完成

(14)查看生成图片

工程文件中 solution1文件夹下csim下build

生成图像如上图

工程完成

(15)生成IP文件 点击如图按钮

点击OK 完成IP的生成

生成的IP

然后就可以在vivado中调用IP了。

猜您喜欢

瓷管电阻是应用于电路中的电阻器,优良的绝缘性能和耐高温特性,常用于高频、低噪声的电路设计中。正确的接法对电路的性能非常重要。本文将详细介绍瓷管电阻的接法,帮助读...
2025-04-17 20:00:47

触发器是在数据库中自动执行特定操作的机制。在特定事件发生时被激活,例如插入、更新或删除数据时。触发器的主要作用是确保数据的完整性和一致性,能够自动执行预定义的逻...
2024-03-04 00:00:00

01C贴片电阻,这个名字听起来很专业,但其实它非常小巧,大小约为0.4mm x 0.2mm,也就是比一粒芝麻还要小! 「01C」指的是它的尺寸代码,对应英制尺寸...
2025-04-14 15:02:06

贴片电阻上的「122」并不是直接表示电阻值的大小,而是一种编码方式。它代表12000欧姆,也就是12kΩ。这种编码方式通常用于三位数的贴片电阻。前两位数字代表有...
2024-11-26 11:29:33

潮湿的施工场所,安全用电很重要。为了防止触电事故的发生,国家标准对照明电源电压作出了明确规定。那么,在潮湿场所施工,照明电源电压究竟不能超过多少伏呢?答案是:3...
2024-08-12 00:00:00

光敏电阻是能够感应光线强度变化的电子元器件,应用于自动照明、光线探测、光传感器等领域。其中,GL5506光敏电阻优良的性能和特性,成为了市场上受到欢迎的选择。本...
2025-04-17 15:30:40

船型开关是常见的电气开关,应用于家用电器和工业设备中。了解船型开关的参数对于选择和使用非常重要。额定电压是关键参数,通常在250V或400V之间,确保开关能够承...
2016-01-16 00:00:00

你是否好奇,小小的手机充电器是如何将220V的交流电转换成手机所需的5V直流电的?这其中,开关电源芯片是很重要的配件。就像一位能量魔术师,高效地调节着电流的电压...
2024-11-21 00:00:00

排阻(又称排阻器)是常用的电阻器组件,应用于各种电路中以实现电阻分布和信号调节。BOURNS(伯恩斯)作为全球知名的电子元件制造商,其排阻产品以高品质和稳定性能...
2017-04-13 08:09:30

你是否曾对着电路板上密密麻麻的元件代码感到一头雾水?其实,解读国内贴片电阻的命名并不难。掌握一些基本规则,你就能快速识别这些小小的电子元件。国内常用的贴片电阻命...
2024-11-26 11:29:21