由于公司项目需要,使用了Basler相机。所以特写此文记录如何使用Basler相机进行采图。公司项目用的代码是不能贴出来的,所以在这篇文章里就不贴代码了,只做流程上的说明。本文内容的依据是Pylon 7.2开发包和USB3.0相机(型号为:Basler acA1920-155um),相机触发模式是软触发。首先要读驱动程序自带的例子,可以实际运行例子熟悉代码书写的流程。我在C语言的例子中没有找到软触发的例子,这是我写这篇文章的原因。留个记录万一以后再遇到可以迅速找到解决方案。然后再读官网的开发说明,链接如下。CSDN上的某些博文也是翻译官网的内容:
不需要把整个网页内容全部读完。一般从“Programming the pylon C API”节开始,读到“Finish Grabbing”节结束就行了。Pylon开发包C语言接口的使用流程如下:
- 初始化开发包
- 枚举相机
- 创建相机句柄
- 打开相机
- 设置相机参数(在此步把触发模式设置为软触发)
- 获取并打开Grabber/分配存放像素数据的内存/注册分配的内存
- 采图
- 反注册第6步分配的内存/释放内存/结束并关闭Grabber
- 关闭相机
- 销毁相机句柄
- 反初始化开发包
下面是一些附加的说明:
在第2步,想在枚举相机之后取某个相机的一般信息可以使用PylonGetDeviceInfo函数。
在第5步设置相机参数需要设置AcquisitionMode为SingleFrame。这是将采图模式设为单帧模式,触发一次采一张图。那么在采图的时候就不需要显式执行AcquisitionStop命令了,它会在执行一次AcquisitionStart命令后自动停止。可参考上方链接的“Starting and Stopping Image Acquisition”节和“Finish Grabbing”节的内容。
在第6步设置和分配采图相关的数据。在Pylon中,相机采图Grabber对象有两个Buffer队列,分别是输入队列和输出队列。采图时,Grabber从输入队列中取一个Buffer将图像数据写到Buffer中,然后将这个Buffer移动到输出队列。开发者取图像数据时调用PylonStreamGrabberRetrieveResult函数,该函数从输出队列中弹出一个Buffer并将此Buffer内容及其所有权返回给开发者使用。开发者拿到图像数据后如果想重复使用该Buffer需要再调用PylonStreamGrabberQueueBuffer把这个Buffer放回到输入队列。可参考上方链接的“Providing Memory for Grabbing”节和“Feeding the Stream Grabber's Input Queue”节的内容。
在第7步,仔细阅读官网的说明可知在软触发开启的情况下不仅要执行AcquisitionStart命令还要执行软触发TriggerSoftware命令。在获取图像像素数据之前还要调用PylonWaitObjectWait函数等待相机完成写入所有像素数据的操作,该WaitObject是在获取Grabber句柄时一并取得的。可参考上方链接的“Starting and Stopping Image Acquisition”节和“Retrieving Grabbed Images”节的内容。
在第8步和第9步,相机使用结束按照顺序释放相关句柄。可参考上方链接的“Finish Grabbing”节的内容。
另外,Pylon相机设置参数和执行命令的函数输入是字符串。如果不知道某个参数的英文名,可以参考Pylon Viewer的相关说明。如下图:
标签:触发,Buffer,Basler,C语言,相机,Grabber,采图 From: https://www.cnblogs.com/mengxiangdu/p/16979572.html