opencv连接摄像头,拍摄
来源:互联网 发布:2013年网络流行语 编辑:程序博客网 时间:2024/04/28 00:00
从官网下载opencv,我下载的是opencv2.4.10版本的。
运行安装,自己选择安装目录,我选择的是F:\软件压缩包\opencv(因为第一次安装,所以选择了这个目录,最好放在c盘,比较通用的目录)
网上下载DirectShow的SDK包,我的是同事拷贝过来的。链接如下:
http://download.csdn.net/detail/u012702039/8398567
新建一个项目,配置下项目属性:
项目->属性->VC++目录->包含目录:
库目录:
项目->属性->链接器->输入:填入这些需要的静态库
opencv_calib3d2410d.libopencv_contrib2410d.libopencv_core2410d.libopencv_features2d2410d.libopencv_flann2410d.libopencv_gpu2410d.libopencv_highgui2410d.libopencv_imgproc2410d.libopencv_legacy2410d.libopencv_ml2410d.libopencv_objdetect2410d.libopencv_ts2410d.libopencv_video2410d.lib
自此,环境配好了。
链接中有CvvImage.h,CvvImage.cpp,CameraDS.h,CameraDS.cpp文件,拷贝到项目目录,然后在项目头文件和源文件中分别添加进来。
在界面添加一个Picture control控件和连接相机,断开相机,拍照按钮。
1.连接相机
连接相机的点击事件中:
int cam_count;cam_count = CCameraDS::CameraCount();if(cam_count==0){MessageBox("未找到摄像头!");return ;} //if(! camera.OpenCamera(0, true)) //弹出属性选择窗口if(! camera.OpenCamera(0, false)) //不弹出属性选择窗口,用代码制定图像宽和高{MessageBox("摄像头初始化失败!");return ;} IplImage* m_Frame; m_Frame=camera.QueryFrame(); CvvImage m_CvvImage; m_CvvImage.CopyOf(m_Frame,1); if (true) { m_CvvImage.DrawToHDC(hDC, &rect); } // 设置计时器,每10ms触发一次事件 SetTimer(1,10,NULL);
定义定时器。
点击对话框,属性栏的消息项,找到WM_TIMER,下拉,<add>OnTimer即可添加一个ontimer响应函数。
void MyDialog::OnTimer(UINT_PTR nIDEvent){/************************************************************************/ /* 显示摄像头 */ /************************************************************************/ IplImage* m_Frame; m_Frame=camera.QueryFrame(); CvvImage m_CvvImage; m_CvvImage.CopyOf(m_Frame,1); if (true) { m_CvvImage.DrawToHDC(hDC, &rect); } CDialogEx::OnTimer(nIDEvent);}
主要内容是把每一帧数据在Onpaint函数中显示。
OnPaint函数内容如下:
void MyDialog::OnPaint(){if (IsIconic()){CPaintDC dc(this); // 用于绘制的设备上下文SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);// 使图标在工作区矩形中居中int cxIcon = GetSystemMetrics(SM_CXICON);int cyIcon = GetSystemMetrics(SM_CYICON);CRect rect;GetClientRect(&rect);int x = (rect.Width() - cxIcon + 1) / 2;int y = (rect.Height() - cyIcon + 1) / 2;// 绘制图标dc.DrawIcon(x, y, m_hIcon);}else{CDialogEx::OnPaint();}}
对话框类中定义 如下变量:
CString SavePath;//拍照后的路径CCameraDS camera; CRect rect; CDC *pDC; HDC hDC; CWnd *pwnd; CvvImage image;
这些变量要在初始化函数中初始化一下:
BOOL MyDialog::OnInitDialog(){CDialogEx::OnInitDialog();// 将“关于...”菜单项添加到系统菜单中。// IDM_ABOUTBOX 必须在系统命令范围内。ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX < 0xF000);// 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动// 执行此操作SetIcon(m_hIcon, TRUE);// 设置大图标SetIcon(m_hIcon, FALSE);// 设置小图标// TODO: 在此添加额外的初始化代码 pwnd = GetDlgItem(IDC_PIC_STATIC); pDC =pwnd->GetDC(); hDC= pDC->GetSafeHdc(); pwnd->GetClientRect(&rect); return TRUE; // 除非将焦点设置到控件,否则返回 TRUE// 异常: OCX 属性页应返回 FALSE}
2.断开相机
void MyDialog::OnBnClickedUnconnect(){// TODO: 在此添加控件通知处理程序代码KillTimer(1);camera.~CCameraDS(); CRect rect ;m_Picture1.GetClientRect(&rect);//获取空间区域FillRect(m_Picture1.GetDC()->GetSafeHdc(),&rect,CBrush(RGB(240,240,240)));}
3.拍照
SavePath已初始化为“c:\\1.jpg”
void MyDialog::OnBnClickedTakepic(){// TODO: 在此添加控件通知处理程序代码//stillCap.StillCap_Snap((LPTSTR)(LPCTSTR)SavePath,false);IplImage* m_Frame; m_Frame=camera.QueryFrame(); //可以存在帧中 cvSaveImage(SavePath,m_Frame,0);//也可以存在本地文件}
调试过程中又遇到一个问题
CComPtr<IEnumPins> pEnum;这样的模板,在mfc中可以,但是在建立mfc Activity项目时,会提示CComPtr不是一个模板,解决方案是在前边加上ATL::即可。
链接:http://bbs.csdn.net/topics/390765643
0 0
- opencv连接摄像头,拍摄
- opencv摄像头拍摄视频并保存方法
- opencv连接摄像头
- Eclispe 下opencv显示摄像头拍摄的第一张图片
- 使用摄像头拍摄照片
- 如何用摄像头拍摄视频
- opencv 拍摄照片
- opencv摄像头
- android手机下开发摄像头拍摄
- Android 获取摄像头拍摄的照片
- Java调用摄像头并拍摄保存
- Unity3D调用摄像头显示当前拍摄画面
- Unity3D调用摄像头显示当前拍摄画面
- C#调用摄像头拍摄,截图,视频
- Unity3D调用摄像头显示当前拍摄画面
- Android ImageView加载摄像头拍摄的大图
- Unity3D调用摄像头显示当前拍摄画面
- C#调用摄像头拍摄,截图,视频
- Tapestry5 grid组件表格嵌套方法
- 使用系统调用来处理文件
- linux内核链表分析与实践
- POJ 2411 Mondriaan's Dream 轮廓线DP
- GTK进阶学习:GTK实现截图功能( 可以指定截图范围 )
- opencv连接摄像头,拍摄
- Maven及LOG4J配置示例
- type… procedure of object
- UVA 143 || Orchard Trees (点 P 在三角形内,S(PAB) + S(PAC) + S( PBC) = S(ABC)
- 射影几何之入门理解1(插序)
- 带中文的url的乱码问题
- dl,dt,dd,ul,li,ol区别及应用
- 一级域名 二级域名,三级域名概念 -- linux内核
- FileNet通过配置ArGoSoft Mail Server实现Email notification