FPGA图像处理HLS实现RGB转灰度,提供HLS工程和vivado工程源码
目录
- 一、图像RGB转灰度原理
- 二、HLS方案实现
- 三、HLS在线仿真并导出IP
- 四、Kintex7开发板vivado工程验证
- 五、zynq7100开发板vivado工程验证
- 六、板级调试验证
- 七、福利:工程源码获取
一、图像RGB转灰度原理
图像rgb转灰度图有固定的公式,具体公式csdn一大堆,这里不用多说,而且公式是公理,不需要去理解为什么,也不需要记住,要用时搜一下就行。
二、HLS方案实现
图像rgb转灰度图本身很简单,用verilog代码实现也就十几行代码的事儿,那为啥还要用HLS实现呢?因为简单,可以作为HLS图像处理入门的例程,通过图像rgb转灰度图试验,可以让我们很好的入门HLS的开发,跟着我做一遍后你就会发现HLS其实没想象中的那么复杂;
HLS工程如下:
头文件如下:
#ifndef _HELAI_RGB2GRAY_H
#define _HELAI_RGB2GRAY_H#include "hls_video.h" //包含hls图像处理库头文件#define INPUT_IMAGE "lena.jpg"
#define OUTPUT_IMAGE "lena_gray.jpg"#define MAX_HEIGHT 1080//图像最大高度
#define MAX_WIDTH 1920//图像最大宽度typedef hls::stream<ap_axiu<24,1,1,1> > AXI_STREAM; //定义一个24bit位宽的AXI_STREAM的类
typedef hls::Mat<MAX_HEIGHT,MAX_WIDTH,HLS_8UC3> RGB_IMAGE; //定义一个无符号24bit位宽的RGB_IMAGE图像的类
typedef hls::Mat<MAX_HEIGHT,MAX_WIDTH,HLS_8UC1> GRAY_IMAGE; //定义一个无符号8bit位宽的灰度图像的类void helai_rgb2gray(AXI_STREAM&INPUT_STREAM,AXI_STREAM&OUTPUT_STREAM,int rows,int cols);#endif
源文件的核心代码如下:
hls::AXIvideo2Mat(INPUT_STREAM,img_0); //将输入的AXIS视频数据转换为Mat,结果放入image_0hls::CvtColor<HLS_RGB2GRAY,HLS_8UC3,HLS_8UC1>(img_0,img_1); //RGB转GRAY,即image_0-->image_1hls::CvtColor<HLS_GRAY2RGB,HLS_8UC1,HLS_8UC3>(img_1,img_2); //GRAY转RGB,即image_1-->image_2hls::Mat2AXIvideo(img_2,OUTPUT_STREAM);
源文件里的代码都有详细注释,只要稍微有点软件基础的应该都能看懂,实在看不懂也可以私我问问。。。。具体源码私我吧兄弟。。。
三、HLS在线仿真并导出IP
仿真源文件如下:
#include "helai_rgb2gray.h"
#include "hls_opencv.h"int main(){//获取图像数据IplImage* src = cvLoadImage(INPUT_IMAGE);IplImage* dst = cvCreateImage(cvGetSize(src),src->depth,src->nChannels);//使用HLS库进行处理AXI_STREAM src_axi,dst_axi; //定义输出输出图片格式为AXISIplImage2AXIvideo(src,src_axi); //将输入源图片转换为AXIS格式helai_rgb2gray(src_axi,dst_axi,src->height,src->width); //运行rgb2gray函数AXIvideo2IplImage(dst_axi,dst); //将处理后的图片由AXIS转换为RGBcvSaveImage(OUTPUT_IMAGE,dst); //保存图像cvShowImage(INPUT_IMAGE,src); //显示源图像cvShowImage(OUTPUT_IMAGE,dst); //显示输出图像cv::waitKey(0); //等待用户按下键盘上的任一按键
}
话不多说直接看仿真结果:
仿真完整成功后即可综合再导出IP:
四、Kintex7开发板vivado工程验证
开发板:Xilinx Kintex7开发板;
开发环境:HLS2019.1;vivado2019.1;
输入:OV5640摄像头,输入分辨率1280x720;
输出:HDMI,输出分辨率1280x720;
工程BD如下:
生成顶层RTL如下:
SDK主函数源码如下:
#include <stdio.h>
#include "xgpio.h"
#include "oak_iic.h"
#include "unistd.h"
#include "helai_vdma.h"
#include "helai_color_back.h"
#include "helai_hls_rgb2gray.h"
//#include "sleep.h"XGpio_Config *XGpioCfg;
XGpio led_gpio;#define AXI_GPIO_DEVICE_ID XPAR_GPIO_0_DEVICE_IDint main(){XGpioCfg = XGpio_LookupConfig(AXI_GPIO_DEVICE_ID);XGpio_CfgInitialize(&led_gpio, XGpioCfg, XGpioCfg->BaseAddress);XGpio_SetDataDirection(&led_gpio, 1, 0); //outputXGpio_DiscreteWrite(&led_gpio, 1, 0);oak_i2c_init(OV5640_IIC_BASEADDR, 1000000, 0x78>>1, IIC_REG_LEN16, IIC_DATA_LEN8);OV5640_Init(OV5640_IIC_BASEADDR,1280,720);helai_hls_rgb2gray(720,1280);helai_vdma();while(1){usleep(500000);XGpio_DiscreteWrite(&led_gpio, 1, 1);usleep(500000);XGpio_DiscreteWrite(&led_gpio, 1, 0);}
}
五、zynq7100开发板vivado工程验证
开发板:Xilinx zynq7100开发板;
开发环境:HLS2019.1;vivado2019.1;
输入:OV5640摄像头,输入分辨率1280x720;
输出:HDMI,输出分辨率1280x720;
工程BD如下:
生成顶层RTL如下:
SDK主函数源码如下:
#include "I2C_16bit.h"
#include "xiicps.h"
#include "xil_io.h"
#include "xparameters.h"
#include "helai_vdma.h"
#include "helai_hls_rgb2gray.h"void main()
{// Initialize OV5640 regesiterI2C_config_init();helai_hls_rgb2gray(720,1280);helai_vdma();while (1) ;
}
六、板级调试验证
K7开发板和zynq开发板实物连接如下:图中K7为连接状态
运行结果静态展示:
下载程序后运行结果如下:以K7开发板为例,持续运行48小时无问题
HLS实现图像rgb转灰度
七、福利:工程源码获取
福利:工程代码的获取
代码太大,无法邮箱发送,以某度网盘链接方式发送,
工程源码下载链接:https://download.csdn.net/download/qq_41667729/87391195
K7开发板网盘资料如下:
zynq开发板网盘资料如下:
FPGA图像处理HLS实现RGB转灰度,提供HLS工程和vivado工程源码相关推荐
- FPGA图像处理HLS实现sobel边沿检测,提供HLS工程和vivado工程源码
目录 一.sobel边沿检测原理 二.HLS方案实现sobel边沿检测 三.HLS在线仿真并导出IP 四.Kintex7开发板vivado工程验证 五.zynq7100开发板vivado工程验证 六. ...
- FPGA驱动FT601实现USB3.0相机HDMI视频采集 提供工程源码和QT上位机源码
目录 1.前言 2.FT601芯片解读和时序分析 FT601功能和硬件电路 FT601读时序解读 FT601写时序解读 3.我这儿的 FT601 USB3.0通信方案 4.详细设计方案 5.vivad ...
- FPGA驱动silicon9011和silicon9134完成HDMI收发,提供工程源码和技术支持
目录 1.HDMI输入输出设计框架 2.silicon9011/9013芯片详解及配置 3.silicon9134芯片详解及配置 4.FPGA工程介绍 5.上板调试验证 6.福利:工程源码获取 1.H ...
- FPGA驱动FT601实现USB3.0相机 OV5640视频采集 提供2套工程源码和QT上位机源码
目录 1.前言 2.FT601芯片解读和时序分析 FT601功能和硬件电路 FT601读时序解读 FT601写时序解读 3.我这儿的 FT601 USB3.0通信方案 4.vivado工程1--彩条视 ...
- FPGA实现MPEG2视频压缩 提供工程源码和技术支持
1.前言 MJPEG.MPEG2.MPEG4.H264 是流行且兼容性很高的 4 种视频编码格式.其中 MJPEG 对每帧独立进行 JPEG 图象压缩,而不利用帧间相关性,因此压缩效果较差. MPEG ...
- FPGA HLS双线性插值图像缩放视频拼接,上板验证稳定通过,提供3套工程源码和技术支持
目录 1.前言 2.HLS实现双线性插值图像缩放 3.vivado工程1:1080P缩小720P 4.vivado工程2:1080P缩小后mixer二分频 5.上板调试验证并演示 6.福利:工程代码的 ...
- FPGA找工作写简历,你离高薪offer只差一个高端项目,提供工程源码和技术支持
这里写目录标题 1.前言 2.你或许很菜 3.工程源码 4.技术支持 5.工程源码和技术支持获取方式 1.前言 如果你是即将毕业的学生或是想转行做FPGA的工程师,你都会面临一个问题,那就是找工作,找 ...
- FPGA硬件png图片解码器,支持所有颜色类型解码,提供工程源码和技术支持
目录 1.前言 2.我已有的视频图像编解码方案 3.png图片解码理论 4.png图片解码性能介绍 5.png图片解码器时序介绍 输入码流 输出图像信息和像素 6.png图片解码器设计详解 7.工程源 ...
- FPGA实现JPEG-LS图像压缩,有损无损可配置,提供工程源码和技术支持
目录 1.前言 2.JPEG-LS图像压缩理论 3.JPEG-LS图像压缩性能介绍 4.JPEG-LS图像压缩时序介绍 5.JPEG-LS图像压缩输出压缩流 6.工程源码和仿真 7.福利:工程代码的获 ...
最新文章
- 机器人如何在不断变化的世界中“找到”自己?
- COMMAND 模式
- “汇新杯”新兴科技+互联网创新大赛青年创客专项赛即将截止报名
- 简述泛型的上界和下界?
- 【GitHub】github相关问题和解决办法
- 开源大数据周刊-第72期
- python不同文件函数调用_不同输入文件的多处理调用函数
- android toolchain maintain team
- 区块链技术的发展现状_区块链的现状及其发展趋势
- 鸿蒙硬件HI3861-I2C-PCF8591
- 模型操作_77个典型岗位员工胜任素质模型操作指导手册
- 学计算机的能看出批图吗,P图P的好,女朋友满街跑,P图先学计算机,清华和这些学校少不了...
- ABAP 内表(internal table) 标题行(header line) 工作区(work area) 简介 - [SAP]
- SQL Server 2016新特性: 对JSON的支持
- hrbusrt 1900 权限问题
- win10安装 Ruby on Rails 问题记录
- eplan2.4安装教程
- iphone4s在ios7下解决卡顿问题
- 脚手架vue-cli系列二:vue-cli的工程模板与构建工具
- 计算机网络—数据链路层