OpenCV中文网站

 找回密码
 立即注册
搜索
热搜: 安装 配置
查看: 5153|回复: 5

请高手帮我看看这段程序~~~~

[复制链接]
发表于 2010-3-11 09:02:47 | 显示全部楼层 |阅读模式
现在做的是将两个摄像头获得的视频流直接拼接的功能。虽然调试,运行后的确将两个视频连接起来了,但是不到几秒就发生错误。
错误提示为: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,&quot;Cam%2d&quot;,i);
                cvNamedWindow(cam_names);       
                if(!cameras.OpenCamera(i,true))     
                {
                        fprintf(stderr,&quot;Can't open camera %d&quot;,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(&quot;final&quot;);

                        cvShowImage(&quot;final&quot;, result);//显示图像                       
               
                if(cvWaitKey(10)=='q')     //一旦按了“q”键,立即退出所有的视频流显示
                        break;
        }

        for(i=0;i<cam_count;i++)
                cvDestroyWindow(cam_names);
        cvDestroyWindow(&quot;final&quot;);


}





小女子不胜感激~~~~~
回复

使用道具 举报

发表于 2010-3-31 14:42:04 | 显示全部楼层

请高手帮我看看这段程序~~~~

可能是没有释放内存。你运行程序,看一下,电脑内存使用率是不是一直在增加。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-4-19 10:40:10 | 显示全部楼层

请高手帮我看看这段程序~~~~

另外,发现如果屏蔽笔记本自带的摄像头,就不能打开外带的两个摄像头。如果不屏蔽,就只能打开本本的和外带的一个摄像头,但是这两个摄像头的分辨率不一样,因此不符合要求。当我尝试打开外带的两个摄像头是,显示的错误提示是内存读取错误,就是什么不能为read。有没有碰到过相同问题的,指教一下!!
回复 支持 反对

使用道具 举报

发表于 2010-4-22 20:27:09 | 显示全部楼层

请高手帮我看看这段程序~~~~

你打开任务管理器 单步执行,查处内存在那一步增加的 对应添加release
回复 支持 反对

使用道具 举报

发表于 2010-8-25 13:18:50 | 显示全部楼层

请高手帮我看看这段程序~~~~

加我QQ交流:281159849
回复 支持 反对

使用道具 举报

发表于 2010-9-27 10:22:21 | 显示全部楼层

请高手帮我看看这段程序~~~~

同意2楼说的..应该是没释放内存吧
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|OpenCV中文网站

GMT+8, 2024-5-6 13:01 , Processed in 0.010668 second(s), 16 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表