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);
实验结果视频展示:
需要原工程的可联系本公众号。
领取专属 10元无门槛券
私享最新 技术干货