OpenCV中IplImage结构使用已有数据源

  OpenCV是处理图像方面非常实用的库,在实践的项目中经常被用作处理图像。在最近的一个项目中,需要使用OpenCV处理摄像头扑捉到的数据,由于摄像头采集回来的数据是h.264格式,需要软处理h.264->YUV->RGBA的转换,摄像头的SDK提供了YUV数据的回调接口,但是起初在转换成RGBA格式时经过了一步数据拷贝的过程,非常耗时,所以就进一步看了一下OpenCV的具体实现,使用IplImage的imageData指针直接指向YUV返回的数据块,从而节省了拷贝数据所需要消耗的时间,大大提高了程序的效率。

代码如下:

/**/
#include <stdafx.h>
#include "cv.h"
#include "cxcore.h"
#include "highgui.h"

int main( int argc, char **argv )
{
    
    /*******************************************************************
    * Author      : Grius |    Time    : 2013/10/9 23:05:53
    * Comment : tempChar被用来模拟已有数据
    *******************************************************************/
    char tempChar[400*400] ;//= 
    for(int i = 0;i<400;i++)
    {
        for(int j = 0;j<400;j++)
        {
            tempChar[i*400+j] = 255;
        }
    }
    //--


    /*******************************************************************
    * Author      : Grius |    Time    : 2013/10/9 23:07:07
    * Comment : 创建IplImage结构实例
    *******************************************************************/
    IplImage *pTempImg = 0;
    pTempImg = cvCreateImage(cvSize(400, 400),  IPL_DEPTH_8U, 1);
    //释放 pTempImg实例分配的数据块
    cvReleaseData(pTempImg );

    //imageData指向已有数据
    pTempImg->imageData = tempChar;
    

    cvNamedWindow("test", 1);

    while(1)
    {
        cvShowImage( "test", pTempImg );
        cvWaitKey(10);
    }
    cvDestroyWindow( "test" );
    cvReleaseImage( &pTempImg );
    return 0;
}

 

 

posted @ 2013-10-09 23:13  Grius  阅读(372)  评论(0)    收藏  举报