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; }

浙公网安备 33010602011771号