前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >OpenCv调用摄像头拍照代码

OpenCv调用摄像头拍照代码

作者头像
全栈程序员站长
发布2022-07-07 20:12:16
1.1K0
发布2022-07-07 20:12:16
举报

大家好,又见面了,我是全栈君。

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

1、申明

代码语言:javascript
复制
#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、打开摄像头

代码语言:javascript
复制
//打开摄像头
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、关闭摄像头

代码语言:javascript
复制
//关闭摄像头
void COpencvCameraCtrl::CloseCamera()
{
	if( vc.isOpened() )
	{
		vc.release();
	}	
}

4、拍照而且保存到本地

代码语言:javascript
复制
//拍摄摄像头
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,须要运行两次

代码语言:javascript
复制
Mat frame;
	
	vc >> frame;
	vc >> frame;
	
	if( !frame.data )
	{
		return FALSE;
	}

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

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

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

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/116310.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年1月2,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档