目录

  • 一、图像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工程源码相关推荐

  1. FPGA图像处理HLS实现sobel边沿检测,提供HLS工程和vivado工程源码

    目录 一.sobel边沿检测原理 二.HLS方案实现sobel边沿检测 三.HLS在线仿真并导出IP 四.Kintex7开发板vivado工程验证 五.zynq7100开发板vivado工程验证 六. ...

  2. FPGA驱动FT601实现USB3.0相机HDMI视频采集 提供工程源码和QT上位机源码

    目录 1.前言 2.FT601芯片解读和时序分析 FT601功能和硬件电路 FT601读时序解读 FT601写时序解读 3.我这儿的 FT601 USB3.0通信方案 4.详细设计方案 5.vivad ...

  3. FPGA驱动silicon9011和silicon9134完成HDMI收发,提供工程源码和技术支持

    目录 1.HDMI输入输出设计框架 2.silicon9011/9013芯片详解及配置 3.silicon9134芯片详解及配置 4.FPGA工程介绍 5.上板调试验证 6.福利:工程源码获取 1.H ...

  4. FPGA驱动FT601实现USB3.0相机 OV5640视频采集 提供2套工程源码和QT上位机源码

    目录 1.前言 2.FT601芯片解读和时序分析 FT601功能和硬件电路 FT601读时序解读 FT601写时序解读 3.我这儿的 FT601 USB3.0通信方案 4.vivado工程1--彩条视 ...

  5. FPGA实现MPEG2视频压缩 提供工程源码和技术支持

    1.前言 MJPEG.MPEG2.MPEG4.H264 是流行且兼容性很高的 4 种视频编码格式.其中 MJPEG 对每帧独立进行 JPEG 图象压缩,而不利用帧间相关性,因此压缩效果较差. MPEG ...

  6. FPGA HLS双线性插值图像缩放视频拼接,上板验证稳定通过,提供3套工程源码和技术支持

    目录 1.前言 2.HLS实现双线性插值图像缩放 3.vivado工程1:1080P缩小720P 4.vivado工程2:1080P缩小后mixer二分频 5.上板调试验证并演示 6.福利:工程代码的 ...

  7. FPGA找工作写简历,你离高薪offer只差一个高端项目,提供工程源码和技术支持

    这里写目录标题 1.前言 2.你或许很菜 3.工程源码 4.技术支持 5.工程源码和技术支持获取方式 1.前言 如果你是即将毕业的学生或是想转行做FPGA的工程师,你都会面临一个问题,那就是找工作,找 ...

  8. FPGA硬件png图片解码器,支持所有颜色类型解码,提供工程源码和技术支持

    目录 1.前言 2.我已有的视频图像编解码方案 3.png图片解码理论 4.png图片解码性能介绍 5.png图片解码器时序介绍 输入码流 输出图像信息和像素 6.png图片解码器设计详解 7.工程源 ...

  9. FPGA实现JPEG-LS图像压缩,有损无损可配置,提供工程源码和技术支持

    目录 1.前言 2.JPEG-LS图像压缩理论 3.JPEG-LS图像压缩性能介绍 4.JPEG-LS图像压缩时序介绍 5.JPEG-LS图像压缩输出压缩流 6.工程源码和仿真 7.福利:工程代码的获 ...

最新文章

  1. 机器人如何在不断变化的世界中“找到”自己?
  2. COMMAND 模式
  3. “汇新杯”新兴科技+互联网创新大赛青年创客专项赛即将截止报名
  4. 简述泛型的上界和下界?
  5. 【GitHub】github相关问题和解决办法
  6. 开源大数据周刊-第72期
  7. python不同文件函数调用_不同输入文件的多处理调用函数
  8. android toolchain maintain team
  9. 区块链技术的发展现状_区块链的现状及其发展趋势
  10. 鸿蒙硬件HI3861-I2C-PCF8591
  11. 模型操作_77个典型岗位员工胜任素质模型操作指导手册
  12. 学计算机的能看出批图吗,P图P的好,女朋友满街跑,P图先学计算机,清华和这些学校少不了...
  13. ABAP 内表(internal table) 标题行(header line) 工作区(work area) 简介 - [SAP]
  14. SQL Server 2016新特性: 对JSON的支持
  15. hrbusrt 1900 权限问题
  16. win10安装 Ruby on Rails 问题记录
  17. eplan2.4安装教程
  18. iphone4s在ios7下解决卡顿问题
  19. 脚手架vue-cli系列二:vue-cli的工程模板与构建工具
  20. 计算机网络—数据链路层

热门文章

  1. 51.【Java String方法的小结】
  2. DCDC基础(8)-- 同步BUCK芯片的电性能参数解读二
  3. .Net深入学习:序列化
  4. android ROM设置默认Launcher(主屏幕应用)
  5. 【学习笔记】OFDM中信道估计技术分析与实现
  6. 线程生命周期 什么时候会出现僵死进程
  7. leetcode:904. 水果成篮
  8. 读《Google软件测试之道》笔记---SWE,SET,TE职责
  9. 追寻着最初的梦想,我们上路吧
  10. vue-cli的webpack模板项目配置文件分析[转]