之前没有关注过这个问题
前天和小伙伴一起聊天。说他们用主动取图;我没听过,但是我觉得我应该用过。其实就是用getframetimeout(),只是觉得自己真是没关注过,她又问你是不是用回调取图。确实,我一直用回调取图,因为这家公司大家都是这么用。为此还复习了很久的函数指针和指针函数之间的关系。知道回调函数需要注册。最开始的公司,他们用Halcon的接口取图,嗯。一张图有时候100ms+,然后就发现,区别确实挺大。正常一幅图。emmm。。。像之前那种项目,30万相机,一个图从前到后,也就7ms.机台给触发到机台收到结果。
今天无意中换相机,需要一个防抖动参数,查找,恰好看到了海康相机的帮助文档。想起前几天小伙伴说的取图方式。记录备用。
文件路径:安装路径的文档文件夹找:
设备连接接口流程
采集卡接口调用流程
回调函数取流
之前从没关注过取图,相机自己也封装了很多次,感觉一直继承前辈的回调,也用的很好,也很少改动。看了说明,感觉写的很清晰,脑子里虽然已经无数次的知道调用顺序。还是感叹工作干的真细致。致敬!
注册回调
注册函数的声明
和定义
使用注册函数,
正儿八经的函数实现
将此处的ImageCallBackHK_OCR1函数作为参数传入到注册函数RegisterImageCallBack里。
以上就可以拿到图。用halcon处理,或者直接用buffer来处理。
当然,这里是海康提供了相对完善的的函数,也可以自己去写回调函数:
比如:某相机:
打开相机后进行注册
具体的实现函数
以上就可以拿到图像数据。这里的LeftCameraCallBack是实现函数,注册函数是SetCheckFunctionPoint,注册的函数类型是FLYCHECKFUNCTION,头文件有对这个函数的参数说明
再比如:
大恒相机:和上文的HK一致,印证前面自己写的回调测试
实现函数:
回调函数KIMI:
回调函数(Callback Function)是一种编程技术,允许一个函数作为参数传递给另一个函数,并在适当的时机被调用。它是一种实现异步处理、事件驱动编程或函数间通信的常用方式。回调函数的定义和使用方式因编程语言和应用场景的不同而有所差异,但其基本概念是相似的。
以下是对回调函数的详细解释,包括其定义、作用和常见应用场景。
- 回调函数的定义
回调函数是一个函数指针(或类似机制),它被传递给另一个函数,并在该函数执行过程中或执行完成后被调用。回调函数允许调用方(调用回调的函数)在适当的时候执行回调方(提供回调函数的代码)定义的逻辑。 - 回调函数的作用
回调函数的主要作用是实现代码的解耦和异步处理。它允许调用方在执行过程中通知回调方某些事件的发生,而无需回调方主动轮询或等待。这种机制在以下场景中非常有用:
异步编程:在异步操作完成时通知调用方。
事件处理:在事件发生时触发特定的逻辑。
多线程编程:在后台线程完成任务后通知主线程。
函数间通信:允许一个函数在执行过程中调用另一个函数。
另外看到有CCM结构体参数,不太了解,KIMI:颜色校正。之前颜色不对会认为是白平衡的问题。好像CCM也有点关系。GET!
在相机领域,CCM主要有两种含义,具体取决于上下文:
-
Camera Compact Module (CCM)
CCM 是指紧凑型相机模组(Camera Compact Module),是摄像头的核心组件,用于捕捉图像。它由多个部分组成,包括镜头(Lens)、图像传感器(Sensor)、红外滤光片(IR Filter)、柔性印制电路板(FPC)、音圈马达(VCM)以及图像处理芯片(DSP)等。这些组件共同工作,完成光线的聚焦、光信号的转换、图像的处理和数据传输等功能。 -
Color Correction Matrix (CCM)
CCM 也指颜色校正矩阵(Color Correction Matrix),是图像信号处理(ISP)中的一个重要模块。它的作用是校正传感器输出的原始 RGB 图像的颜色偏差,以确保图像的颜色更接近人眼的视觉感受。CCM 通常是一个 3x3 或 3x4 的矩阵,通过调整 RGB 分量的比例,补偿由于传感器特性、镜头光学特性或光源变化导致的颜色偏差。
如果你提到的是相机硬件中的 CCM,那么它指的是 Camera Compact Module;如果是图像处理中的 CCM,则指的是 Color Correction Matrix。
之前很多都没注意,原来相机有这么多的结构体可用,惭愧!
很多结构体都没用过,相机除了打开关闭和取固定信息,以及设置一些参数,其他的功能都没用过,一直是参考前人做的,下次可以试试海康封装的功能。应该效率会更高吧。加油!
结点信息也截图一下:
从线阵换面阵,我还专门搞了一个切换按钮,原来人家有这个功能。真是。
定时曝光(Timed):定时曝光。曝光持续时间时间使用 ExposureTime 或 ExposureAuto 功能设置,曝光从 FrameStart 或 LineStart 开始。
触发器宽度(TriggerWidth):使用当前帧或线触发信号(s)脉冲的宽度来控制曝光持续时间。请注意,如果帧或线 TriggerActivation 是 RisingEdge 或 LevelHigh,曝光时间将是触发保持高电平的时间。如果 TriggerActivation 是 FallingEdge 或 LevelLow ,曝光时间将是触发保持低电平的时间。
触发器控制(TriggerControlled):使用一个或多个触发信号(s)来独立于当前的帧或线触发器控制曝光持续时间。请参见触发器选择器(TriggerSelector)特性的 ExposureStart,ExposureEnd 和 ExposureActive 。
还要注意,曝光模式(ExposureMode)优先于使用 TriggerSelector = Exposure 定义的曝光触发器设置……并定义哪个触发器(如果有的话)是活动的。