迈德威视相机的封装

基于迈德威视相机的封装

.h头文件
通过宏和条件编译来决定使用哪个相机SDK

//#define USING_MINDVISION_GRAB
#ifdef USING_MINDVISION_GRAB
#include "CameraApi.h"	 
#pragma comment(lib, "MVCAMSDK_X64.lib")

class CCameraMindVision
{
public:
	CCameraMindVision();
	~CCameraMindVision();

private:
	CameraHandle    m_hCamera;	//相机的设备句柄|the handle of the camera we use

	bool m_kong;

	BYTE *m_pImageDataR;
	BYTE *m_pImageDataG;
	BYTE *m_pImageDataB;
public:
	HObject grabImg;
	HTuple hWith;
	HTuple hHeight;
	HTuple hWndID;
public:
	static int InitCameraDevice();
	static void CloseCameraDevice();

	BOOL StartDevice(int cmIndex, char *chCamIndex);
	void StopDevice();
	/*void setShutter(int shutterTm);
	void setGain(int gain);*/
	BOOL GetImage(HObject *pDstImg=NULL);
};
#endif

这里是相机功能的实现
主要是1.初始化枚举相机相机2.关闭相机驱动的3.选择一个相机打开驱动4关闭驱动5抓图
如果需要扩展其他的相机,成员函数名不变,通过定义不同的宏名 来使用

#ifdef USING_MINDVISION_GRAB
CCameraMindVision::CCameraMindVision()
{
	m_hCamera = 0;
	m_kong = 1;

	m_pImageDataR = NULL;
	m_pImageDataG = NULL;
	m_pImageDataB = NULL;

}

CCameraMindVision::~CCameraMindVision()
{
	if(!m_kong)
	{
		//delete []m_pImageData;
		delete []m_pImageDataR;
		delete []m_pImageDataG;
		delete []m_pImageDataB;
	}
}


int CCameraMindVision::InitCameraDevice()
{
	INT iCameraNums;
	iCameraNums = CameraEnumerateDeviceEx();
	
	return iCameraNums;
}

void CCameraMindVision::CloseCameraDevice()
{

}

BOOL CCameraMindVision::StartDevice(int cmIndex, char *chCamIndex)
{
	CameraSdkStatus status;
	if ((status = CameraInitEx(cmIndex,-1,-1,&m_hCamera)) != CAMERA_STATUS_SUCCESS)
	{		
		return FALSE;
	}

	CameraPlay(m_hCamera);
	
	return TRUE;
}

void CCameraMindVision::StopDevice()
{
	if(m_hCamera != 0)
	{
		CameraUnInit(m_hCamera);
		m_hCamera = 0;
	}
}

BOOL CCameraMindVision::GetImage(HObject *pDstImg)
{
	tSdkFrameHead 	sFrameInfo;
	BYTE*			pRgbBuffer;

	pRgbBuffer = CameraGetImageBufferEx(m_hCamera,& sFrameInfo.iWidth,& sFrameInfo.iHeight,1000);
	if(pRgbBuffer != NULL)
	{
		INT iW = sFrameInfo.iWidth;
		INT iH = sFrameInfo.iHeight;
		
		HObject Image;

		if(m_kong)
		{
			m_pImageDataR = new BYTE[iW * iH];
			m_pImageDataG = new BYTE[iW * iH];
			m_pImageDataB = new BYTE[iW * iH];
			m_kong = FALSE;
		}

		int bytewidth = (iW * 3 + 3 ) / 4 * 4 ;
		int bytewidthg = (iW + 3 ) / 4 * 4 ;
		for( int j = iH-1; j>=0; j--)
		{//(注意tuple中图像数据的存放和VC中的差别)
			for(int  i = 0; i < iW; i++)
			{
				*(m_pImageDataB + j * bytewidthg + i ) =* (pRgbBuffer + j * bytewidth + i * 3 + 0 );
				*(m_pImageDataG + j * bytewidthg + i) =* (pRgbBuffer + j * bytewidth + i * 3 + 1 );
				*(m_pImageDataR + j * bytewidthg + i)=* (pRgbBuffer + j * bytewidth + i * 3 + 2 );			
			}
		}

		GenImage3Extern(pDstImg,"byte",iW,iH,
		(long)m_pImageDataR,
		(long)m_pImageDataG,
		(long)m_pImageDataB,NULL);

		return TRUE;
	}
	else
	{
		return FALSE;
	}
}

#endif
德威相机SDK是一套软件开发工具包,旨在帮助开发人员实现与德威相机的软件集成和应用开发。SDK提供了开发所需的各种功能接口和工具,包括图像采集、处理、传输、识别等。 德威相机SDK的主要特点包括以下几个方面: 1. 强大的图像采集功能:SDK提供了丰富的图像采集功能接口,可以实现对相机的控制、参数设置、图像预览等操作。开发者可以自定义图像采集的分辨率、帧率等参数,以满足不同应用场景下的需求。 2. 多种图像处理能力:SDK内置了多种图像处理算法,如人脸检测、目标识别、图像增强等,可以帮助开发者实现各种图像处理功能。同时,SDK还支持自定义算法的集成,开发者可以根据实际需求进行扩展和定制。 3. 高效稳定的数据传输:SDK提供了高效稳定的数据传输接口,支持实时传输和存储传输两种模式。开发者可以根据需求选择合适的传输方式,以保证数据的实时性和稳定性。 4. 统一的开发环境:SDK通过提供统一的开发环境和接口,简化了开发者的开发流程。开发者可以使用SDK提供的API进行开发,无需关心底层的硬件和驱动细节,从而提高了开发效率。 总之,德威相机SDK是一套功能强大、易于使用的软件开发工具包,可以帮助开发人员快速实现与德威相机的集成和应用开发,同时提供了丰富的图像采集、处理、传输等功能,适用于各种应用场景。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值