首页 > 代码库 > OpenCv调用摄像头拍照代码
OpenCv调用摄像头拍照代码
最近在研究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(); };
//打开摄像头 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; }
//关闭摄像头 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 frame; vc >> frame; vc >> frame; if( !frame.data ) { return FALSE; }
如果仅仅执行一次,会出现两个问题:
A、如果打开摄像头立即调用拍照保存,第一次会失败,获取不到数据
B、每次拍摄保存的图片是上一次的图片
OpenCv调用摄像头拍照代码
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。