HLS学习入门(图像加载)
学习如何加载图片,视频;一些常用的API。
一、前言
创建工程的步骤见上一节,这里注意一下,执行C仿真之前,不需要添加源文件,只需要添加test文件。另外注意不要opencv_top.cpp文件,否则仿真失败。
二、图片数据的获取
1. 通过 cvLoadImage 函数加载图片
cvSaveImage函数
格式:
通过 cvLoadImage 函数加载图片格式如下
IplImage* src = cvLoadImage(INPUT_IMAGE);
cvShowImage(“src”,src);
函数cvSaveImage保存图像到指定文件。 图像格式的的选择依赖于filename的扩展名,请参考 cvLoadImage。只有8位单通道或者3通道(通道顺序为’BGR’ )可以使用这个函数保存。如果格式,深度或者通道不符合要求,请先用cvCvtScale 和 cvCvtColor转换;或者使用通用的cvSave保存图像为XML或者YAML格式。
方法1 cvLoadImage函数加载图片
IplImage* src = cvLoadImage(INPUT_IMAGE);
//创建头并分配数据
IplImage* dst = cvCreateImage(cvGetSize(src), src->depth, src->nChannels);//获取原始图像大小
AXI_STREAM src_axi, dst_axi;
//将opencv中的IplImage格式的图像数据类型转换成AXI4-Stream格式的图像数据流
//从而可以利用FPGA进行数据处理
IplImage2AXIvideo(src, src_axi);
//image_filter(src_axi, dst_axi, src->height, src->width);
AXIvideo2IplImage(src_axi, dst);
cvSaveImage(OUTPUT_IMAGE, dst);
//窗口名,图片
cvShowImage( "result_1080p",dst);
cvReleaseImage(&src);
//cvWaitKey()函数的功能是使程序暂停,等待用户触发一个按键操作。
//但如果该函数参数设为一个正数,则程序将暂停一段时间,
//时间长为该整数值个毫秒单位,然后继续执行程序,即使用户没有按下任何键。
cvWaitKey();
2. 通过 imread 函数加载图片
imread函数
格式:
通过imread函数读取图片,格式如下
Mat src_rgb = imread(INPUT_IMAGE);
IplImage src = src_rgb;
cvShowImage(“src”,&src);
//方法2 imread函数加载图片
Mat src_rgb = imread(INPUT_IMAGE,CV_LOAD_IMAGE_GRAYSCALE);//加载图片并灰度显示
IplImage src = src_rgb;
cvSaveImage(OUTPUT_IMAGE, &src);
cvShowImage("src",&src);
waitKey(0);
return 0;
三、视频数据的获取
1. cvCaptureFromAVI函数
格式:cvCaptureFromAVI(“AVI 文件名称”);
功能:函数进行视频文件的载入,用来播放 AVI 文件视频;
cvCaptureFromAVI跟cvCaptureFromFile,cvCreateFileCapture都是一样的作用;文件的类型
不一定必须是 AVI 格式,只要文件符合 OpenCV 支持的格式就能播放。
2. cvGrabFrame函数
格式:int cvGrabFrame(CvCapture 结构体);
功能:将 capture 抓下來的相片放在 OpenCV 中;其与 cvQueryFrame()是相同的步骤;
cvGrabFrame()返回值为 0 或 1;0 是失败,1 是成功
3. cvGrabFrame函数
格式:cvRetrieveFrame(CvCapture 结构);
功能:从 OpenCV 快取中得到 Frame,并配置给 IplImage 结构体;其中:
cvQueryFrame()=cvGrabFrame()+cvRetrieveFrame().
//读取视频文件
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;
四、摄像头数据的获取
1. cvCaptureFromCAM函数
格式:CvCapture*cvCaptureFromCAM( int index );
参数:index,要使用的摄像头索引。
2. cvReleaseCapture函数
功能:释放(cvCaptureFromCAM)这个结构,使用函数 cvReleaseCapture。
3. cvWriteFrame函数
功能:要将视频写入文件中,使用 cvWriteFrame 写入一帧到一个视频文件中
格式:int cvWriteFrame( CvVideoWriter* writer, const IplImage* image );
//摄像头操作
IplImage *frame;
CvCapture *capture = cvCaptureFromCAM(0);//捕获摄像头数据0--笔记本自带摄像头 1--外部摄像头
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;