近期在研究OpenCv对摄像头的调用。现将代码贴出,供大家批评指正。

1、申明

#include"./opencv2/opencv.hpp"

#ifdef _DEBUG

#pragma comment(lib,"opencv_core249d.lib")
#pragma comment(lib,"opencv_highgui249d.lib") #else #pragma comment(lib,"opencv_core249.lib")
#pragma comment(lib,"opencv_highgui249.lib") #endif using namespace cv; class COpencvCameraCtrl :
public CCameraBase
{
public:
VideoCapture vc;
public:
COpencvCameraCtrl(void);
~COpencvCameraCtrl(void); public:
BOOL OpenCamera( HWND win, CString strVid, CString strPid ); //打开摄像头
BOOL PhotoPic( CString strSaveFile );
void CloseCamera();
};

2、打开摄像头

//打开摄像头
BOOL COpencvCameraCtrl::OpenCamera(HWND win, CString strVid, CString strPid)
{
InitCameraWin( win ); vid = strVid;
pid = strPid; nIndex = GetCameraIndexInOs( vid, pid ); if( nIndex < 0 )
{
return FALSE;
} if( !vc.open( nIndex ) )
{
return FALSE;
} vc.set( CV_CAP_PROP_FRAME_WIDTH, nWidth );
vc.set( CV_CAP_PROP_FRAME_HEIGHT, nHight ); if( !vc.isOpened() )
{
bOpen = false;
return FALSE;
} bOpen = true; return TRUE;
}

3、关闭摄像头

//关闭摄像头
void COpencvCameraCtrl::CloseCamera()
{
if( vc.isOpened() )
{
vc.release();
}
}

4、拍照而且保存到本地

//拍摄摄像头
BOOL COpencvCameraCtrl::PhotoPic( CString strSaveFile )
{
Mat frame; vc >> frame;
vc >> frame; if( !frame.data )
{
return FALSE;
} //设置图像质量
vector<int> compression_params;
compression_params.push_back( IMWRITE_JPEG_QUALITY );
compression_params.push_back( 75 ); imwrite( strSaveFile.GetBuffer(0), frame, compression_params );
strSaveFile.ReleaseBuffer(); return TRUE;
}

须要说明的是:每次从摄像头获取数据到Mat,须要运行两次

Mat frame;

	vc >> frame;
vc >> frame; if( !frame.data )
{
return FALSE;
}

假设只运行一次,会出现两个问题:

A、假设打开摄像头马上调用拍照保存,第一次会失败,获取不到数据

B、每次拍摄保存的图片是上一次的图片

OpenCv调用摄像头拍照代码的更多相关文章

  1. C# - VS2019调用AForge库实现调用摄像头拍照功能

    前言 作为一名资深Delphi7程序员,想要实现摄像头扫描一维码/二维码功能,发现所有免费的第三方库都没有简便的实现办法,通用的OpenCV或者ZXing库基本上只支持XE以上的版本,而且一维码的识别 ...

  2. android: 调用摄像头拍照

    很多应用程序都可能会使用到调用摄像头拍照的功能,比如说程序里需要上传一张图片 作为用户的头像,这时打开摄像头拍张照是最简单快捷的.下面就让我们通过一个例子来学 习一下,如何才能在应用程序里调用手机的摄 ...

  3. web HTML5 调用摄像头的代码

    最近公司要求做一个在线拍照的功能,具体代码如下: <html> <head> <title>html5调用摄像头拍照</title> <style ...

  4. android ——调用摄像头拍照和相册

    先在布局文件中加入两个按钮和一个图片控件 <?xml version="1.0" encoding="utf-8"?> <LinearLayo ...

  5. vue实现PC端调用摄像头拍照人脸录入、移动端调用手机前置摄像头人脸录入、及图片旋转矫正、压缩上传base64格式/文件格式

    进入正题 1. PC端调用摄像头拍照上传base64格式到后台,这个没什么花里胡哨的骚操作,直接看代码 (canvas + video) <template> <div> &l ...

  6. AForge调用摄像头拍照时设置分辨率

    简单记录下AForge2.2.5.0版本调用摄像头拍照时设置分辨率的方法. FilterInfo info = _videoDevices[0];//获取第一个摄像头 _cameraDevice = ...

  7. openCV 调用摄像头

    OpenCV调用摄像头 环境 python:python3.6 摄像头:网络摄像头 Python库:openCV # -*- coding: utf-8 -*- # @author leone # @ ...

  8. 调试opencv调用摄像头程序时碰到的问题

    昨天晚上想把opencv学习笔记整理一下,当跑opencv调用摄像头的程序的时候老是出现Assertion failed (size.width>0 && size.height ...

  9. 利用face_recognition,dlib与OpenCV调用摄像头进行人脸识别

    用已经搭建好 face_recognition,dlib 环境来进行人脸识别 未搭建好环境请参考:https://www.cnblogs.com/guihua-pingting/p/12201077. ...

随机推荐

  1. Data Annotation

    Data Annotation 什么是Data Annotation ? 如何使用 ? 自定义Validate Attribute EF  Db first中使用Data Annotation asp ...

  2. Ajax的三种实现及JSON解析

    本文为学习笔记,属新手文章,欢迎指教!! 本文主要是比较三种实现Ajax的方式,为以后的学习开个头. 准备: 1.  prototype.js 2.  jquery1.3.2.min.js 3.  j ...

  3. haproxy path_beg

    path_beg : prefix match 前缀匹配 path_dir : subdir match path_dom : domain match path_end : suffix match ...

  4. xend调用xenstore的出错揭秘

    近期发现几例问题,均是xend里面报了同一个错误 File "/usr/lib64/python2.4/site-packages/xen/xend/xenstore/xstransact. ...

  5. 浅析SSH核心原理(二)

    Hibernate是一个开放源代码的ORM(对象-关系映射)框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库. Hibernate可以应用在任 ...

  6. redisTemplate 操作

    redisDao封装类-其他dao集成他 package com.ffcs.wlan.dao.common; import javax.annotation.Resource; import org. ...

  7. input标签的hidden属性的应用及作用

    定义:传输关于客户端/服务器交互的状态信息. Transmits state information about client/server interaction. 解释: 此元素在页面中不显示,在 ...

  8. 基于visual Studio2013解决C语言竞赛题之1018数组求和

         题目 解决代码及点评 /************************************************************************/ ...

  9. freemarker自己定义标签报错(三)

    freemarker自己定义标签 1.错误描写叙述 freemarker.core.ParseException: Encountered " " at line 14, colu ...

  10. Python全栈开发

    Python全栈开发 一文让你彻底明白Python装饰器原理,从此面试工作再也不怕了. 一.装饰器 装饰器可以使函数执行前和执行后分别执行其他的附加功能,这种在代码运行期间动态增加功能的方式,称之为“ ...