概述
大恒相机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开发笔记四所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复