Python之OpenCV 005 工业相机Basler之图像采集

工业机器视觉系统2D应用用到Basler(德国),Baumer(瑞士),ImageSource(台湾),大恒和海康等等牌子工业相机。

Basler(巴斯勒)是比较常用的,性价比高。aCA2500-14gm是非常常用的500百万GigE网络口圈帘黑白工业相机。不到3K的价格性能非常的稳定。

相机的SDK是Pylon-5.2.0,是Pylon不是Python,它们俩有点相同,但是是没有任何关系的。

这个SDK有C,C++,C#的开发包,但是没有Python的。在Github上有一个pypylon项目,可以用。

Pylon对应的pypylon是1.4.0版本。

下载代码直接安装就可以了。

之后就可以用下面代码测试一下了。

"""
有趣的事情
没有结束
2020/4/2 16:28
"""
from pypylon import pylon
import numpy as np
import cv2 as cv

# 连接Basler相机列表的第一个相机
camera = pylon.InstantCamera(pylon.TlFactory.GetInstance().CreateFirstDevice())

# 开始读取图像
camera.StartGrabbing(pylon.GrabStrategy_LatestImageOnly)
converter = pylon.ImageFormatConverter()

# 转换为OpenCV的BGR彩色格式
converter.OutputPixelFormat = pylon.PixelType_BGR8packed
converter.OutputBitAlignment = pylon.OutputBitAlignment_MsbAligned

while camera.IsGrabbing():
    grabResult = camera.RetrieveResult(5000, pylon.TimeoutHandling_ThrowException)

    if grabResult.GrabSucceeded():
        # 转换为OpenCV图像格式
        image = converter.Convert(grabResult)
        img = image.GetArray()
        cv.namedWindow('title', cv.WINDOW_NORMAL)
        cv.imshow('title', img)
        k = cv.waitKey(1)
        if k == 27:
            break
    grabResult.Release()

# 关闭相机
camera.StopGrabbing()
# 关闭窗口
cv.destroyAllWindows()


多谢!美

 

### 在 Windows Subsystem for Linux (WSL) 中使用 OpenCV 访问摄像头 在 WSL 环境下尝试通过 OpenCV 使用摄像头会遇到一些挑战,因为默认情况下 WSL 并不直接支持硬件设备如摄像头的访问。当尝试打开摄像头时可能会收到错误提示 `VIDEOIO(V4L2:/dev/video0): can't open camera by index`[^1]。 然而,有几种方法可以实现这一目标: #### 方法一:利用 V4L2loopback 和 v4l2capture 实现虚拟摄像头传递 一种解决方案是在 Windows 上创建一个虚拟摄像头并将其实例化到 WSL 的 `/dev/videoX` 设备节点中。这通常涉及以下几个方面的工作: - **安装依赖项** 需要在 Ubuntu 下安装必要的软件包来处理视频流: ```bash sudo apt-get update && sudo apt-get install -y v4l-utils ffmpeg ``` - **配置V4L2Loopback模块** 创建并加载自定义内核模块以允许从主机捕获图像并通过虚拟设备提供给Linux子系统。 这一步骤较为复杂,可能需要编译特定版本的驱动程序并与当前使用的WSL环境相匹配。 #### 方法二:借助第三方工具和服务转发摄像头数据至WSL 另一种更简便的方式是采用专门设计用于解决此类问题的应用程序或服务,它们可以在后台运行于Windows之上,并将来自物理相机的数据桥接到Linux端口供应用程序消费。 例如,可以通过设置SSH隧道或者使用类似CamTwist这样的应用把实际拍摄的画面转码成网络直播的形式传送给位于WSL中的接收者进程解析播放。 #### Python代码示例展示如何尝试连接本地摄像头 尽管上述两种方案都需要额外的努力去实施,下面给出了一段简单的Python脚本用来测试一旦成功建立了通往真实/模拟摄像装置的有效路径之后怎样用OpenCV库来进行基本操作: ```python import cv2 cap = cv2.VideoCapture(0) if not cap.isOpened(): print("Error: Could not open video.") else: while True: ret, frame = cap.read() if not ret: break gray_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) cv2.imshow('Video Stream', gray_frame) key = cv2.waitKey(1) & 0xFF if key == ord('q'): break cap.release() cv2.destroyAllWindows() ``` 这段代码试图获取编号为0的第一个可用摄像头资源,并将其转换为灰度模式实时预览直到按下 'q' 键退出循环停止录制过程。
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值