ViVADO HLS 图像的获取

ViVADO HLS图像的获取

1背景知识

OPENCV(Open Source Computer Vision)被广泛的使用在计算机视觉开发上。使用VIVADO HLS视频库在zynq-7000全可编程soc上加速OPENCV应用的开发,将大大提升我们的计算机视觉开发。

图1和图2展示了如何使用opencv加速zynq-7000全可编程soc的计算机视觉开发。

1>使用Vivado HLS开发opencv的计算机视觉IP;

2>将IP添加到SOC系统中

3>验证和下板实验

本次重点为HLS的图像读入显示,视频读入显示,以及摄像头的读入显示。

2 HLS使用到的函数

enum

{

/* 8bit,color or not */

CV_LOAD_IMAGE_UNCHANGED=-1,//读取图像的原通道数

/* 8bit,gray */

CV_LOAD_IMAGE_GRAYSCALE=0,//读取灰度图片

/* ?,color */

CV_LOAD_IMAGE_COLOR=1,//读取彩色图片

/* anydepth, ? */

CV_LOAD_IMAGE_ANYDEPTH=2,//任意深度

/* ?,any color */

CV_LOAD_IMAGE_ANYCOLOR=4//任意颜色

};

/* loadimage from file

iscolorcan be a combination of aboveflags where CV_LOAD_IMAGE_UNCHANGED

overrides the other flags

using CV_LOAD_IMAGE_ANYCOLOR alone isequivalent to CV_LOAD_IMAGE_UNCHANGED

unless CV_LOAD_IMAGE_ANYDEPTH is specifiedimages are converted to 8bit

*/

CVAPI(IplImage*)cvLoadImage(constchar*filename,intiscolor CV_DEFAULT(CV_LOAD_IMAGE_COLOR));

Filename文件名

Iscolor图像的颜色和深度

使用方法:

IplImage*src = cvLoadImage(filename,CV_LOAD_IMAGE_GRAYSCALE);

其他函数可以采用点击右键open declaration查看。

Test.cpp源码:

#include"Test.h"

#include"hls_opencv.h"

usingnamespacecv;

intmain (intargc,char**argv) {

/*

//方法1 cvLoadImage函数加载图片

IplImage*src=cvLoadImage(INPUT_IMAGE,CV_LOAD_IMAGE_GRAYSCALE);

IplImage*dst=cvCreateImage(cvGetSize(src),src->depth,src->nChannels);//获取原始图像大小

AXI_STREAM src_axi, dst_axi;

IplImage2AXIvideo(src, src_axi);

AXIvideo2IplImage(src_axi,dst);

cvSaveImage(OUTPUT_IMAGE,dst);

cvShowImage( "result_1080p",dst);

cvReleaseImage(&src);

cvWaitKey();

*/

/*

//方法2 cvLoadImage函数加载图片

Mat src_rgb =imread(INPUT_IMAGE,CV_LOAD_IMAGE_COLOR);//加载图片并灰度显示

IplImagesrc= src_rgb;

cvSaveImage(OUTPUT_IMAGE,&src);

cvShowImage("src",&src);

waitKey(0);

return 0;

*/

/*

//读取视频文件

IplImage *frame;

CvCapture *capture =cvCaptureFromAVI("1.avi");//获取视频数据

cvNamedWindow("AVI player",0);

while(true)

{

if(cvGrabFrame(capture))

{

frame = cvRetrieveFrame(capture);

cvShowImage("AVI player",frame);

if(cvWaitKey(10)>=0) break;

}

else

{

break;

}

}

cvReleaseCapture(&capture);

cvDestroyWindow("AVI player");

return 0;

*/

//摄像头操作

IplImage*frame;

CvCapture*capture = cvCaptureFromCAM(1);//捕获摄像头数据0--笔记本自带摄像头1--外部摄像头

cvNamedWindow("AVIplayer",0);

while(true)

{

if(cvGrabFrame(capture))

{

frame =cvRetrieveFrame(capture);

cvShowImage("AVIplayer",frame);

if(cvWaitKey(10)>=0)break;

}

else

{

break;//没有采集到视频数据退出

}

}

cvReleaseCapture(&capture);

cvDestroyWindow("AVIplayer");

return0;

}

Test.h源码:

#ifndef_TOP_H_

#define_TOP_H_

#include"hls_video.h"

//maximum image size

#defineMAX_WIDTH 1920

#defineMAX_HEIGHT 1080

// I/OImage Settings

#defineINPUT_IMAGE"test_1080p.jpg"

#defineOUTPUT_IMAGE"result_1080p.bmp"

#defineOUTPUT_IMAGE_GOLDEN"result_1080p_golden.bmp"

//typedef video library core structures

typedefhls::stream>AXI_STREAM;

typedefhls::ScalarRGB_PIXEL;

typedefhls::MatRGB_IMAGE;

#endif

3 VIVADO HLS图像获取实验

实验原图1

//方法1cvLoadImage函数加载图片

IplImage* src =cvLoadImage(INPUT_IMAGE,CV_LOAD_IMAGE_GRAYSCALE);

实验结果1

//读取视频文件

IplImage*frame;

CvCapture*capture =cvCaptureFromAVI("1.avi");//获取视频数据

cvNamedWindow("AVIplayer",0);

实验结果视频展示:

需要原工程的可联系本公众号。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181103G0UEPH00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码关注腾讯云开发者

领取腾讯云代金券