读取大恒工业相机码流&opencv调用显示

#include "stdafx.h"
#include "GxIAPI.h"
#include "DxImageProc.h" 
#include <iostream>  
#include <opencv2/core/core.hpp>  
#include <opencv2/imgproc/imgproc.hpp>  
#include <opencv2/highgui/highgui.hpp> 

using namespace cv; 
using namespace std;

static void GX_STDC OnFrameCallbackFun(GX_FRAME_CALLBACK_PARAM* pFrame)
{
	int64_t nWidth = pFrame->nWidth;
	int64_t nHeight= pFrame->nHeight;
	BYTE *m_pBufferRaw = new BYTE[nWidth * nHeight];          ///< 原始图像数据
	BYTE *pRGB24Buf = new BYTE[nWidth * nHeight];          
	if (pFrame->status == 0)
	{
		memcpy(m_pBufferRaw, pFrame->pImgBuf, pFrame->nImgSize);
		for (int i = 0; i <nHeight; i++)     
{ 
			memcpy(pRGB24Buf + i*nWidth, m_pBufferRaw + (nHeight - i - 1)*nWidth, (size_t)nWidth); 
		} 
		IplImage* src= cvCreateImage(cvSize(nWidth, nHeight), 8, 1);
		src->imageData = (char*)m_pBufferRaw;
		namedWindow("Image:",CV_WINDOW_NORMAL);
		cvShowImage("Image:",src); 
		cvWaitKey(1);
		cvReleaseImage(&src);
		delete []m_pBufferRaw;
		delete []pRGB24Buf;
	}
	return;    
}
int _tmain(int argc, _TCHAR* argv[])
{
	GX_STATUS status = GX_STATUS_SUCCESS;  
	GX_DEV_HANDLE hDevice = NULL;
	GX_OPEN_PARAM stOpenParam;
	uint32_t nDeviceNum = 0;

	//在起始位置调用GXInitLib()进行初始化,申请资源
	status = GXInitLib();
	if (status != GX_STATUS_SUCCESS)
	{
		return 0;
	}
	// 枚举设备列表
	status = GXUpdateDeviceList(&nDeviceNum, 1000);
	if ((status != GX_STATUS_SUCCESS) || (nDeviceNum <= 0))
	{
		return 0;
	}
	//打开设备
	stOpenParam.accessMode = GX_ACCESS_EXCLUSIVE;
	stOpenParam.openMode   = GX_OPEN_INDEX;
	stOpenParam.pszContent = "1";
	status = GXOpenDevice(&stOpenParam, &hDevice);
	if (status == GX_STATUS_SUCCESS)
	{
		//注册图像处理回调函数
		status = GXRegisterCaptureCallback(hDevice, NULL, OnFrameCallbackFun);
		//发送开采命令
		status = GXSendCommand(hDevice, GX_COMMAND_ACQUISITION_START);     


		while(1)
		{
		}
		//发送停采命令
		status = GXSendCommand(hDevice, GX_COMMAND_ACQUISITION_STOP);
		//注销采集回调
		status = GXUnregisterCaptureCallback(hDevice);
	}
	//在结束的时候调用GXCLoseLib()释放资源
	status = GXCloseDevice(hDevice);
	status = GXCloseLib();
	return 0;
}

如若涉及到opencv处理图像部分可设置全局变量,在回调函数中间IplImage* src拷贝出来,后在GXSendCommand函数下进行操作。

以上代码中涉及的opencv及大恒lib、dll请自行添加至环境中。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值