这些天来,我正在使用GigE测试一款联合视觉Alvium G1-1236相机(更确切地说,是Alvium G1-1236)。我正在使用C++,Ubuntu18.04。
在用户指南、API文档和示例代码的帮助下,我可以成功地编写C++代码来找到摄像机,打开它,并开始连续的图像采集(然后停止并关闭它)。
然而,当我拔掉以太网电缆并在几秒钟后将它插回时,我发现图像采集似乎停止了(因为我正在打印接收到的每一幅图像的元数据,并且在重新插入以太网电缆后没有看到任何新的打印的元数据)。
因此,在以太网电缆拔出并再次插入后,我正在尝试实现图像采集的自动恢复。我认为我需要观察摄像机列表的变化,所以我实现了我的。
class CameraListObserver : public AVT::VmbAPI::ICameraListObserver
{
public:
virtual void CameraListChanged(
AVT::VmbAPI::CameraPtr pCam,
AVT::VmbAPI::UpdateTriggerType reason
);
};然后,是的,在回调方法CameraListChanged中,我现在可以接收有关相机插入和-out的事件通知。
然而,,我不知道如何重新启动图像采集适当的。在CameraListChanged方法中,我尝试直接开始连续的图像采集,但是得到了误差Invalid call。我猜想也许图像采集还没有停止,所以我试着在再次启动之前停止采集,但是在相机上调用StopContinuousImageAcquisition返回了VmbErrorOther。
我尝试了一些示例代码,但它们似乎都没有实现自动恢复图像采集功能。有人能给我一些建议/提示/提示吗?在断开和重新连接以太网电缆之后,如何恢复图像的连续采集?
发布于 2022-11-08 15:35:19
有许多函数不能在CameraListObserver中调用,您可以在Vimba手册第22页(第4章)上看到一个列表,包括设置特性值或运行功能命令。对于特性观察者和帧观察者,也有这样的列表。因此,观察者应该被用作事件触发器。相机的开启和图像采集需要在观察者之外启动。也许您可以让它修改一个全局状态变量,您可以签入不同的线程或循环吗?
https://stackoverflow.com/questions/74341049
复制相似问题