配置DX_Aug09_DShow获取摄像头图像

1、  首先带例子安装DXSDK_Aug09.exe,可在官网下载(msdn.microsoft.com/directx/)DirectX August 2009(http://download.microsoft.com/download/4/C/F/4CFED5F5-B11C-4159-9ADC-E133B7E42E5C/DXSDK_Aug09.exe)。假设安装路径为:D:\Program Files\Microsoft DirectX SDK (August 2009)。

2、  将strmbasd+&+strmbase文件夹中的两个dll文件拷到D:\Program Files\Microsoft DirectX SDK (August 2009)\Lib\x86下。(64位机到x64下。)

3、  将DShow文件拷到D:\Program Files\Microsoft DirectX SDK (August 2009)\sample\C++下。

4、  VS中包含文件D:\Program Files\Microsoft DirectX SDK (August 2009)\Include和D:\Program Files\Microsoft DirectX SDK (August 2009)\Samples\C++\DirectShow\BaseClasses。

5、  添加库文件D:\Program Files\Microsoft DirectX SDK (August 2009)\Lib\x86到最顶端。

6、  添加strmbase.lib strmbasd.lib到lib链接器中。

7、  将ARFrameGrabber文件夹中的ARFrameGrabber.h 和 ARFrameGrabber.cpp 拷贝到到自己工程中(自己修改一下,加了些逻辑判断),再添加进来。测试一下:

#include<iostream>
#include <highgui.h>
#include "ARFrameGrabber.h"
#include <Windows.h>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
	static ARFrameGrabber frameGrabber;
	IplImage ds_frame;
	int stride;
	BYTE* myBuffer;
	frameGrabber.Init(0, true); //设置支持directshow的设备编号,从0开始
	frameGrabber.SetFlippedImage(true); //图像是否翻转
	IplImage* frame=NULL;
	cvNamedWindow("test",0);
	while (true)
	{
		frame = NULL;
		frameGrabber.GrabByteFrame(); //获取一帧
		myBuffer = frameGrabber.GetByteBuffer(); //得到图像的缓冲
		while(!myBuffer)
		{
			UINT nRet=MessageBox(0,"警告:\n\n摄像头正在被其他程序占用,请关闭所有可能使用摄像头的程序后重试!","启动出错",MB_RETRYCANCEL|MB_ICONEXCLAMATION);
			if(nRet==IDRETRY)
			{
				frameGrabber.GrabByteFrame(); //获取一帧
				myBuffer = frameGrabber.GetByteBuffer(); //得到图像的缓冲
			}
			else
			{
				cvDestroyAllWindows();
				exit(0);
			}
		}
		int width = frameGrabber.GetWidth();
		int height = frameGrabber.GetHeight();
		stride  = (width * sizeof( RGBTRIPLE ) + 3) & -4;//图像每行所占的字节数,4的倍数,对齐
		cvInitImageHeader( &ds_frame, cvSize(width, height), 8, 3,IPL_ORIGIN_BL, 4 ); //创建IplImage
		ds_frame.widthStep = stride;
		cvSetData( &ds_frame, myBuffer, stride ); //copy数据
		frame = &ds_frame;
		cvShowImage("test",frame);
		if (cvWaitKey(3)==27)
		{
			break;
		}
	}
	cvDestroyAllWindows();
	return 0;
}

 

 遇到问题一:

dxtrans.h": No such file or directory 
2010-04-14 16:25
在qedit.h 中添加如下

#define __IDxtCompositor_INTERFACE_DEFINED__ 
#define __IDxtAlphaSetter_INTERFACE_DEFINED__ 
#define __IDxtJpeg_INTERFACE_DEFINED__ 
#define __IDxtKey_INTERFACE_DEFINED__

再修改qedit.h 中引用 dxtrans.h 的部分,要求注释掉
#include "oaidl.h"
#include "ocidl.h"
//#include "dxtrans.h"
#include "amstream.h"

遇到问题二:

//#include <qedit.h>出现问题,或者找不到了什么基类可以直接用下面方式
#define __IDxtCompositor_INTERFACE_DEFINED__ 
#define __IDxtAlphaSetter_INTERFACE_DEFINED__ 
#define __IDxtJpeg_INTERFACE_DEFINED__ 
#define __IDxtKey_INTERFACE_DEFINED__ 
#include <qedit.h>

注:以上除DXSDK_Aug09.exe安装文件外(太大了553MB),其他都在资源中下载,资源名《配置DX_Aug09_DShow获取摄像头图像》

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值