大恒相机的图像处理

莫名其妙的虫子 2014-07-03 01:05:38
最近刚接触VC图像处理。现在有大恒的相机和SDK,但是对如何操作返回来的pImageBuffer这一块还是不怎么搞的懂。请懂得来讲讲!


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;

}


然后打印出来的是一堆问号。
...全文
2559 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
Depvision 2016-03-23
  • 打赏
  • 举报
回复

我也出现了这个错误,是用opencv函数库去实现的,怎么解决呢?谢谢
C_xz1992 2015-09-18
  • 打赏
  • 举报
回复
您好,不知道您是否对大恒相机软件部分是否了解,我现在用软件打开相机,变异后出现问题,不知道您是否可以帮忙解决
谢谢
  • 打赏
  • 举报
回复
还有不清楚的是pImageBuffer他的这个指针指向的是所有的像素点,还是说包括信息头等数据
  • 打赏
  • 举报
回复
#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;
}
这是整个的框架。指针已经指向实际的缓冲区了。。。但是我不清楚他到底返回来的是什么格式。。。。所以也不知道该怎么操作每个像素点。
fishion 2014-07-03
  • 打赏
  • 举报
回复
pImageBuffer指向一个有效的空间没,GX_FRAME_CALLBACK_PARA中是不是有个BYTE *相似的成员了。打印的时候用printf("%x\t", Ipscr);

19,466

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧