学习如何加载图片,视频;一些常用的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 文件视频;

  cvCaptureFromAVIcvCaptureFromFile,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;