大恒相机sdk开发+opencv开发笔记四

大恒相机sdk开发+opencv开发笔记四

1.GXRegisterCaptureCallback注册图像回调函数
首先我们要 明白回调函数的意义
什么是回调函数。
相关链接:https://blog.csdn.net/wohiusdashi/article/details/79540783?ops_request_misc=&request_id=&biz_id=102&utm_term=%E5%9B%9E%E8%B0%83%E5%87%BD%E6%95%B0&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduweb~default-7-.nonecase&spm=1018.2226.3001.4187
首先我们了解什么是回调函数才能更好的理解这个接口的意义
2.实例程序

#include"GxIAPI.h"

 

//图像回调处理函数

staticvoidGX_STDCOnFrameCallbackFun(GX_FRAME_CALLBACK_PARAM* pFrame)

{

   if (pFrame->status == GX_FRAME_STATUS_ SUCCESS)

   {

       //对图像进行某些操作

   }   

   return;    

}

 

intmain(intargc, char* argv[])

{

   GX_STATUSstatus = GX_STATUS_SUCCESS;

   GX_DEV_HANDLEhDevice = NULL;

   GX_OPEN_PARAMstOpenParam;

   uint32_tnDeviceNum = 0;

 

   // 初始化库

   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);     

 

       //---------------------

       //

       //在这个区间图像会通过OnFrameCallbackFun接口返给用户

       //

       //---------------------

 

       //发送停采命令

       status = GXSendCommand(hDevice, GX_COMMAND_ACQUISITION_STOP);

 

       //注销采集回调

       status = GXUnregisterCaptureCallback(hDevice);

   }

   status = GXCloseDevice(hDevice);

   status = GXCloseLib();

 

   return 0;

}

首先我们进行分析这个例子,和其他函数一样先引用库,对相机进行初始化,寻找设备,找到设备后打开设备。此时对相机的状态进行判断,即:

if (status == GX_STATUS_SUCCESS)

   {

       //注册图像处理回调函数

       status = GXRegisterCaptureCallback(hDevice, NULL, OnFrameCallbackFun);

 

       //发送开采命令

       status = GXSendCommand(hDevice, GX_COMMAND_ACQUISITION_START);     

 

       //---------------------

       //

       //在这个区间图像会通过OnFrameCallbackFun接口返给用户

       //

       //---------------------

 

       //发送停采命令

       status = GXSendCommand(hDevice, GX_COMMAND_ACQUISITION_STOP);

 

       //注销采集回调

       status = GXUnregisterCaptureCallback(hDevice);

   }

相机状态ok之后我们现在进入下一步对图像进行回调函数,我们先了解这个函数的定义:
**大恒相机sdk开发+opencv开发笔记四_第1张图片
**
可以看见有三个传入值,简单来说这个函数就是用来调用另一个函数的,
可能有点绕了,通俗的讲就是打比方现在我们运行的是这个A函数,但A函数有三个传入值,这三个传递值分别是设备句柄,用户自定义指针。和B函数。在这里第二个私有指针我们基本是用不到的。这个指针的意思是你在调用函数之前定义一个指针,可以在执行函数传递的时候通过这个指针来存储图像。在大恒的手册之中写到他是可以为空的。
现在我们运行这个A函数,执行之后就是A函数拿着设备句柄给了B函数,此时B函数得到设备句柄开始执行函数。
我们用到相机肯定是要对其的进行处理,

staticvoidGX_STDCOnFrameCallbackFun(GX_FRAME_CALLBACK_PARAM* pFrame)

{

   if (pFrame->status == GX_FRAME_STATUS_ SUCCESS)

   {

       //对图像进行某些操作

   }   

   return;    

}

上述函数就是我们调用相机之后开始对其进行处理了。

补充:回调函数有类型:

在这里插入图片描述
掉线回调函数如果用的是网络控制的相机,则需要,如果只是用usb接口链接则不需要这一步流程。

你可能感兴趣的:(机器视觉opencv,大恒相机开发笔记)