C++使用Dshow方式预览USB摄像头并保存

网上有很多各种各样的方法拍照。有Opencv vfw Dshow。vfw方式只能连接默认摄像头,捕获时还卡,两三秒内无响应。Dshow方式好,但网上有人的代码马上卡。我费了很大劲才成功。代码:


#include <Windows.h>
#include <dshow.h>

// 用于确保安全释放的宏
#define SAFE_RELEASE(x) { if (x) x->Release(); x = NULL; }
//摄像头序号
#define CAMERA_INDEX 2 
class CCapture
{
public:
	

	HRESULT Init(HWND hwnd); // 初始化
	HRESULT FindCaptureDevice(); // 寻找视频采集设备
	HRESULT Render(); // 渲染并预览视频
	void DestroyGraph(); // 销毁先前创建的filter

	

private:
	// 窗口句柄
	HWND					m_hwnd;
	// 视频采集预览相关
	IGraphBuilder			*m_pGraph; // filter granph(manager)
	ICaptureGraphBuilder2	*m_pCapture; // capture granph
	IMediaControl			*m_pMediaC; // 媒体控制接口
	IMediaEventEx			*m_pMediaE; // 媒体事件接口
	IVideoWindow			*m_pVideoW; // 视频窗口接口
	IBaseFilter				*m_pFilter; // 基类filter
};
HRESULT CCapture::Init(HWND hwnd)
{
	HRESULT hr;

	// 创建filter graph manager
	hr = CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC, IID_IGraphBuilder, (void **)&
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值