图像采集系统中的一些问题
原来没有养成写博客的习惯,都是自己写个文档,但是一旦文档多了起来,查看起来就很麻烦。
从今天开始,做出改变!!!
基本介绍
这个系统是我3月份实习的时候,老大让做的一个小项目(感觉像是本科大作业),能实现控制6个摄像头的同时开启关闭,截取图片或者视频,可以选择存储路径,点击保存后,会创建文件夹,该时刻的视频或者图片被保存,文件名为日期-video/日期-pic
Opencv的配置问题
网上的很多的博客都写的非常详细我就不再赘述,我用的是vs2010+opencv2.4.9,因为让我加了一个能够识别摄像头个数的,别人写好的库是opencv2版本的。
错误原因记录
- 加载图片路径不可过长
- MFC每一个控件ID其实是define的一个整数,想要遍历控件只需添加整数变量即可
- MFC在控制台输出信息
AllocConsole();
freopen( “CONOUT$”,“w”,stdout);
printf(“i的值为%d\n”, (IDC_STATIC1+i));
FreeConsole(); - 将opencv换成2.4.9后先是报没有opencv_core249.dll opencv_highgui249.dll错
解决办法:从opencv安装文件夹找到这几个文件放到c:\windows\system32 和c:\windows\sysWow64下 - 运行 imread报错: 去项目属性的附加依赖项中删除d.dll文件
视频videoWriter, open失败,将ffmeg_64.dll添加到c:\windows\system32 和c:\windows\sysWow64下
一些Tips
- _T是一个宏,他的作用是让你的程序支持unicode编码
- MFC在控制台输出信息
AllocConsole();
freopen( “CONOUT$”,“w”,stdout);
printf(“i的值为%d\n”, (IDC_STATIC1+i));
FreeConsole(); - opencv默认分辨率为640480,想要修改分辨率可以在打开摄像头的时候,给摄像头设定分辨率为19001080
capture.set(CV_CAP_PROP_FRAME_WIDTH, 1900);
capture.set(CV_CAP_PROP_FRAME_HEIGHT, 1080); - immwrite保存图片质量
https://www.cnblogs.com/skyfsm/p/7136709.html - 程序中包含外部的库,确保他人能运行程序,需要在目录里加上程序用到的库(lib和include)并修改库目录和包含目录
- 面向对象编程要求线程是调用的接口必须是全局函数或静态成员函数
https://blog.csdn.net/eqiang8271/article/details/23684149 - c++类中静态函数不能调用类中的非静态函数原因
程序最终都将在内存中执行,变量只有在内存中占有一席之地时才能被访问。
类的静态成员(变量和方法)属于类本身,在类加载的时候就会分配内存,可以通过类名直接去访问;
非静态成员(变量和方法)属于类的对象,所以只有在类的对象产生(创建类的实例)时才会分配内存,然后通过类的对象(实例)去访问。
在一个类的静态成员中去访问其非静态成员之所以会出错是因为在类的非静态成员不存在的时候类的静态成员就已经存在了,访问一个内存中不存在的东西当然会出错。