【VS2015_MFC_OPENCV_摄像头控制实例教程】
一、功能实现目标
- 能够本地、远程控制摄像头的启动和关闭;
- 能够显示摄像头的拍摄的图像信息;
- 能够截图,并保存到电脑指定的路径文件中;
二、功能实现步骤
1、搭建界面
(1)新建工程项目基于对话框的MFC
(2)在对话框“工具箱”中添加【picture control】控件到对话框中,
用来显示摄像头显示界面用
将属性中ID修改为IDC_PIC_CAMERA;属性的Type改为Rectangle。
添加【打开摄像头】按钮和【截图】按钮控件,实现打开摄像头和关闭摄像头的切换以及截图到指定目录下的功能。
2、写一个线程文件mThread
不是类,作为相机执行线程的文件,同时也可以扩展为其他线程,做成一个多线程管理文件。
(1)在stdaf.h中声明一个线程函数。
(2)在mThread文件中定义线程函数。
检查摄像头是否打开;打开摄像头。
3 对话框背景色的设置
三、系统环境及相关文件配置
在release、x86模式下属性配置
- VC++目录下配置包含目录和库目录。
2.预处理器中配置
3.连接器中输入配置
四、测试效果
运行软件后打开摄像头,遇到问题,解决方法见附录
(1)只能在一局部范围内显示。
(2)打开摄像头测试
(3)截图测试:
五、使用说明
(1)如何指定显示本地的摄像头?
可以通过capture1.Open()函数传入摄像头的网络通道地址访问远程的摄像头,或者传入0访问本地摄像头。
附录:常见问题及解决方法
(1)问题描述:编译之后VC报错:C4996,
解决方法:(方法3已测有效)
1:使用安全的函数替换老的函数
2:屏蔽警告信息
1.#pragma warning(disable:4996)
2.在预编译头文件stdafx.h里定义下面的宏(include其他头文件的最前面):
#define _CRT_SECURE_NO_DEPRECATE或#define_CRT_SECURE_NO_WARNINGS
3.更改预处理定义:
项目->属性->配置属性->C/C++ -> 预处理器 -> 预处理器定义,增加_CRT_SECURE_NO_DEPRECA
(2)问题描述:error LNK2019: 无法解析的外部符号
原因分析:找不到相应的库文件,即xx.lib文件。找不到库文件的原因可能有以下几种:
①你使用别人的库,比如说OPenCV的库,OpenGL的库等等第三方库。常见情况是你只是包含了头文件,但是没有引入库文件
②你没有使用别人的库,微软自带的一些库也可能出现这样的问题。这时常见情况是链接失败的函数所在的头文件在项目属性的包含目录下,但是相应的库文件却不在项目属性的默认库目录里。比如说常见问题
样式里的CreateViewGLContext(struct HDC__ *)函数就是这种情况,此函数在头文件wingdi.h里定义,这个头文件在项目属性中默认的包含目录下,但是对应的库文件opengl32.lib却不在库目录里
③你使用了自己做的库文件。这种情况自己没有试过,看过网上的一些说法
解决办法:核心是添加相应的库文件即可
对于情况①,有两种办法,一种是通常配置一下项目属性就好(在你相应开发环境配置好的前提下),在项目属性的库目录里面添加相应库文件所在的目录,然后在链接器->输入->附加依赖项里加入对应的库文件即可
第二种解决办法是利用预处理命令#pragma comment (lib, "xxx.lib"),关于这条命令的使用方法不是本文的主要目的,读者可参见网上其他博客。这样做的前提是所用的库目录在VS的默认库目录下或者库文件所在目录已经被添加到项目的库目录里或者相应的库文件已经被你拷贝到当前项目目录下,相当于是第一种方法的“代码化”版本
对于情况②,你只需要找到函数所在的库文件(通常按照函数名在网上搜即可找到函数所在的库文件),然后文件首部添加#pragma comment (lib, "xxx.lib")即可
对于情况③,因你使用方法不同,可参见情况一和情况二处理
转载于:https://www.cnblogs.com/yangcs/p/5087490.html
(3)问题 描述:vs201:LNK1104无法打开.exe文件错误
- 问题描述:程序运行后,点击打开摄像头按钮,出现如下报错:
原因分析:上一次调试中,点击“确定”按钮,未将相机线程完全释放掉,导致资源占用,当再次调试的时候回出现这个问题。
解决方法:将确定按钮删除,或者在确定按钮下加入“关闭相机线程的代码”。
解决方法:将计算机重启后再次运行即可。
(5)获取系统时间的方法:
(6)属性表的配置有哪些?
(7)问题描述:摄像头只显示局部的以很小窗口显示摄像头拍摄镜头?
原因:对话框中的控件IDC_PICFORWARD_CAMERA没有关联变量
解决方案:在DoDataExchange()函数中添加IDC_PIC_FORWARD_CAMERA的关联变量,m_PictureControl1,即可。
代码详细见连接:
https://download.csdn.net/download/gl1037645565/13077621