我是靠谱客的博主 专一海燕,最近开发中收集的这篇文章主要介绍大恒相机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之后我们现在进入下一步对图像进行回调函数,我们先了解这个函数的定义:
**在这里插入图片描述
**
可以看见有三个传入值,简单来说这个函数就是用来调用另一个函数的,
可能有点绕了,通俗的讲就是打比方现在我们运行的是这个A函数,但A函数有三个传入值,这三个传递值分别是设备句柄,用户自定义指针。和B函数。在这里第二个私有指针我们基本是用不到的。这个指针的意思是你在调用函数之前定义一个指针,可以在执行函数传递的时候通过这个指针来存储图像。在大恒的手册之中写到他是可以为空的。
现在我们运行这个A函数,执行之后就是A函数拿着设备句柄给了B函数,此时B函数得到设备句柄开始执行函数。
我们用到相机肯定是要对其的进行处理,

staticvoidGX_STDCOnFrameCallbackFun(GX_FRAME_CALLBACK_PARAM* pFrame)

{

   if (pFrame->status == GX_FRAME_STATUS_ SUCCESS)

   {

       //对图像进行某些操作

   }   

   return;    

}

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

补充:回调函数有类型:

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

最后

以上就是专一海燕为你收集整理的大恒相机sdk开发+opencv开发笔记四的全部内容,希望文章能够帮你解决大恒相机sdk开发+opencv开发笔记四所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(43)

评论列表共有 0 条评论

立即
投稿
返回
顶部