|
现在做的是将两个摄像头获得的视频流直接拼接的功能。虽然调试,运行后的确将两个视频连接起来了,但是不到几秒就发生错误。
错误提示为:insufficient memory ,in function cvAlloc,c:\user\VP\opencv\coxore\src\cxalloc.cpp
不知道怎么才能避免这个错误,因为opencv我才刚接触,是菜鸟!!
希望各位高手指教!!!!
程序代码为:void main()
{
int cam_count;
int result_width=0,result_height=0;
if(0==(cam_count = CCameraDS::CameraCount())||cam_count>10) //获取摄像头个数
{
printf("There's no camera or too many. Check out the connection!\n");
return;
}
printf("There are %d cameras.\n",cam_count);
char cam_names[10][20];
CCameraDS cameras[10];
int i;
for(i=0;i<cam_count;i++) //打开摄像头 创建显示窗口
{
sprintf(cam_names,"Cam%2d",i);
cvNamedWindow(cam_names);
if(!cameras.OpenCamera(i,true))
{
fprintf(stderr,"Can't open camera %d",i);
return;
}
}
IplImage * pFrame[5];
IplImage * result;
while(1) //每个摄像头都显示视频流
{
for(i=0;i<cam_count;i++)
{
pFrame = cameras.QueryFrame(); //获取一祯
cvShowImage(cam_names, pFrame);
result_width+=pFrame->width;
result_height=pFrame->height;
}
result=cvCreateImage(cvSize(result_width, result_height),pFrame[0]->depth,pFrame[0]->nChannels);
cvZero(result); //先将图像的所有元素置零
cvSetImageROI(result, cvRect(0,0,pFrame[0]->width,pFrame[0]->height)); //基于给定的矩形设置'感兴趣'区域
cvAdd(pFrame[0], result, result); //第一二个参数均是输入数组,第三个参数为输出数组
cvSetImageROI(result, cvRect(pFrame[0]->width,0,pFrame[1]->width,pFrame[1]->height));
cvAdd(pFrame[1], result, result);
cvResetImageROI(result);
cvNamedWindow("final");
cvShowImage("final", result);//显示图像
if(cvWaitKey(10)=='q') //一旦按了“q”键,立即退出所有的视频流显示
break;
}
for(i=0;i<cam_count;i++)
cvDestroyWindow(cam_names);
cvDestroyWindow("final");
}
小女子不胜感激~~~~~ |
|