19,466
社区成员
发帖
与我相关
我的任务
分享
BYTE *pImageBuffer;///采集图像数据缓冲区
static void __stdcall OnFrameCallbackFun(GX_FRAME_CALLBACK_PARAM* pFrame)
{
if (pFrame->status == 0)
{
for(i=0;i<3;i++)
{
Ipscr= *(pImageBuffer+i);
cout<<Ipscr<<'\t';
}
}
cout<<'\n';
a++;
return;
}

#include "stdafx.h"
#include "GxIAPI.h"
#include "iostream.h"
#define IS_SNAP_SINGLE 0
BYTE *pImageBuffer;///采集图像数据缓冲区
static void __stdcall OnFrameCallbackFun(GX_FRAME_CALLBACK_PARAM* pFrame)
{
//可对pImageBuffer 进行图像处理或者显示操作
//………………………
//结束图像处理操作
}
int main(int argc, char* argv[])
{
GX_DEV_HANDLE m_hDevice;; //USB 数字摄像机句柄
GX_STATUS status = GX_STATUS_SUCCESS;
pImageBuffer = new BYTE[2048 * 1536 ];
GXInitLib(); //初始化库
uint32_t m_nNumberDevice;
GXUpdateDeviceList(&m_nNumberDevice,1000);//获得设备个数
GX_DEVICE_BASE_INFO *baseinfo = new GX_DEVICE_BASE_INFO[m_nNumberDevice];
size_t nSize = m_nNumberDevice * sizeof(GX_DEVICE_BASE_INFO);//获取设备信息
status = GXGetAllDeviceBaseInfo(baseinfo, &nSize);
status =GXOpenDeviceByIndex(1, &m_hDevice);; //打开数字相机,注:已经包含默认参数
设
status =GXSetInt(m_hDevice,GX_INT_WIDTH,2048);//设置图像宽度2048
status =GXSetInt(m_hDevice,GX_INT_HEIGHT,1536);//设置图像高度1536
status
=GXSetEnum(m_hDevice,GX_ENUM_ACQUISITION_MODE,GX_ACQ_MODE_CONTINUOUS);//设
置采集模式为连续采集
status =GXSetInt(m_hDevice,GX_INT_ACQUISITION_SPEED_LEVEL,8);//设置采集速度,范围
(0-12)
status =GXSetInt(m_hDevice,GX_INT_GAIN,8);//设置增益,增益范围(0-63)
status =GXSetFloat(m_hDevice,GX_FLOAT_EXPOSURE_TIME,30000);//曝光时间30ms
#if IS_SNAP_SINGLE //采集单帧模式
GX_FRAME_DATA frameData;
frameData.pImgBuf = pImageBuffer;
frameData.nStatus = -1;
status = GXSendCommand(m_hDevice, GX_COMMAND_ACQUISITION_START);
do
{
status = GXGetImage(m_hDevice, &frameData, 20);
} while(frameData.nStatus != 0);
水星系列数字摄像机快速开发说明书
11
© 2012 中国大恒(集团)有限公司北京图像视觉技术分公司
//可对pImageBuffer 进行图像处理或者显示操作
// ……………………….
//结束图像处理操作
status = GXSendCommand(m_hDevice, GX_COMMAND_ACQUISITION_STOP);
#else//连续采集模式
status = GXRegisterCaptureCallback(m_hDevice,pImageBuffer, OnFrameCallbackFun);//注
册回调函数
status = GXSendCommand(m_hDevice, GX_COMMAND_ACQUISITION_START);
Sleep(2000);//延迟2s,等待回调函数采集n 帧图像
status = GXSendCommand(m_hDevice, GX_COMMAND_ACQUISITION_STOP);
status = GXUnregisterCaptureCallback(m_hDevice);//注销回调函数
#endif
status = GXCloseDevice(m_hDevice);
delete []pImageBuffer;//回收图像缓冲区
GXCloseLib(); //关闭库
return 0;
}
这是整个的框架。指针已经指向实际的缓冲区了。。。但是我不清楚他到底返回来的是什么格式。。。。所以也不知道该怎么操作每个像素点。