basler工业面阵相机使用 和 python pypylon模块调用basler相机采集数据

2,488 阅读4分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第6天,点击查看活动详情

1 basler工业相机介绍与驱动安装

1.1 basler介绍

1、basler工业相机是德国品牌,从驱动和连接上感觉要比dalsa的相机更好连接和使用,并且basler自带的驱动pylon Viewer能够保存视频 和 保存连续的视频帧图片,比较方便对相机进行测试工作。而dalsa的驱动CamExpert如果要保存连续的帧图片,还必须要根据接口自己去写,这样就有些耽误测试的进度!

2、20220907 周三,去席总哪里拿了一个baslar的面阵黑白相机

3、相机型号为basler acA1600-20gm,目前该相机已经停产(参考)!

里面有该相机的参数介绍,相机的设计图,相机电源针脚图等介绍。

1.2 basler驱动的安装

1、安装baslar驱动Basler_pylon_5.0.9.10388.exe如下,需要选择相机的连接接口,如下,一共有四种:

  • USB 接口的相机
  • GigE 接口的相机(使用网线连接,一般工业相机使用的都是千兆网线
  • FireWire 接口的相机
  • Camera Link 接口的相机

每个相机接口外观如下所示:

image.png

image.png

image.png

image.png

2、驱动默认的安装路径为:C:\Program Files\Basler\pylon 5

image.png

2 basler相机连接

这里我以basler 面阵黑白相机acA1600-20gm为例说明,(该相机是GigE接口,即使用网线进行连接),其他相机也是如此,没有什么区别。

1、打开pylon IP Configurator应用程序

image.png

2、首先在命令行下使用ipconfig命令查看自己以太网的IP地址,我的是192.168.1.22,因此只需要把相机的IP地址配置成同网段的192.168.1.xxx即可连接,如下:

image.png

3、然后打开数据采集软件pylon Viewer软件,此时可以看到GigE下连接的相机Basler acA1600-20gm(红色的圆按钮就是数据采集按钮!)

image.png

3 相机使用pylon Viewer软件采集视频或图片数据

1、选择视频录制或连续帧的照片采集

1)点击工具栏中的红色按钮,选择:

  • Video (AVI)录制视频采集
  • Sequence of still images:连续的帧照片采集

image.png

2)视频采集窗口打开如下:

image.png

4 在pylon Viewer中调节相机参数设置

1、打开View-Features (Basler acA1600-20gm)就可以在左下方看到对应的窗口,此时可以在里面设置相机的触发方式、白平衡等等参数

image.png

5 basler相机的python接口

pypylon库包是basler官方提供的basler的相机的python接口,安装方式:

pip install pypylon

5.1 使用python pypylon库包调用basler相机

1、连接上相机之后,就可以使用如下的pylon接口调用basler相机进行数据采集了。如下是读取摄像头的每一帧数据并保存!(参考

from pypylon import pylon
import cv2

# conecting to the first available camera
camera = pylon.InstantCamera(pylon.TlFactory.GetInstance().CreateFirstDevice())

# Grabing Continusely (video) with minimal delay
camera.StartGrabbing(pylon.GrabStrategy_LatestImageOnly)
converter = pylon.ImageFormatConverter()

# converting to opencv bgr format
converter.OutputPixelFormat = pylon.PixelType_BGR8packed
converter.OutputBitAlignment = pylon.OutputBitAlignment_MsbAligned
i = 0
while camera.IsGrabbing():
    grabResult = camera.RetrieveResult(1000, pylon.TimeoutHandling_ThrowException)
    i += 1
    if grabResult.GrabSucceeded():
        # Access the image data
        image = converter.Convert(grabResult)
        img = image.GetArray()
        cv2.namedWindow('title', cv2.WINDOW_NORMAL)
        cv2.imshow('title', img)
        cv2.imwrite(r'D:\dataset\test_data\%06d.jpg'%i, img)
        k = cv2.waitKey(1)
        if k == 27:
            break
    grabResult.Release()

# Releasing the resource
camera.StopGrabbing()

cv2.destroyAllWindows()

6 相机保存图片存储大小的计算

bmp格式图片存储大小计算

因为,bmp是位图(bitmap)就是原始数据,数据是没有经过压缩的,jpg和png都是经过压缩的格式,因此不能够直接计算出他们的存储大小

1、首选确定bmp图像的位深,如下示例bmp图像的位深为24位

注意:

一个字节等于八位:1Byte=8bit

image.png

2、因此bmp格式图片的存储大小为:

bmp格式图片存储大小=w×h×bit_deep(单位bitbmp格式图片存储大小=w\times h \times bit\_deep(单位bit)

因此上图图片的存储大小为:

存储大小=1626×1236×24bit8=6029208Byte=6029208Byte1024=5887.8984375KB=5887.8984375KB10245.7499MB存储大小=\frac{1626\times 1236 \times 24bit}{8}=6029208 Byte=\frac{6029208 Byte}{1024}=5887.8984375KB=\frac{5887.8984375KB}{1024} \approx 5.7499MB

可以看到我们计算出的大小和图片信息显示的5.75MB是保持一致的!

3、其他格式

一般其他格式图片的位深

  • jpg格式是RGB通道,位深是24
  • png格式是RGBA通道,位深是32

但是jpg和png图像是经过压缩的,因此存储大小会比bmp格式小很多,比如一张表面bmp格式图片可能9MB大小,保存成png格式可能只有200KB大小!(当然具体大小是多少,应该是和压缩的方式密切相关的,压缩越多,图片存储大小就越小,这样图像的质量也就越差!)

参考www.jianshu.com/p/3eceec14f… 参考blog.csdn.net/augustme/ar… 参考blog.csdn.net/weixin_4364…