跳转到内容
STAGING SERVER
DEVELOPMENT SERVER

与 OpenCV 集成#

本主题介绍如何将 pypylon 图像采集与 OpenCV 集成,以实现可视化和图像处理。

为什么要使用 OpenCV?#

OpenCV 是应用最广泛的计算机视觉库之一。它提供以下功能:

  • 快速图像处理算法
  • 可视化工具
  • 支持特征检测、滤波和分析
  • 与 NumPy 的互操作性

由于 pypylon 图像本身就是 NumPy 数组,因此集成过程非常顺畅。

基本工作流#

Camera → pypylon → NumPy Array → OpenCV → Display/Processing

简单示例#

import cv2
from pypylon import pylon

with pylon.InstantCamera(pylon.FirstFound) as camera:
    camera.StartGrabbingMax(1)

    with camera.RetrieveResult(5000) as grab_result:
        if grab_result.GrabSucceeded():
            image = grab_result.Array

            # Display using OpenCV
            cv2.imshow("image", image)
            cv2.waitKey(0)
            cv2.destroyAllWindows()

Color Format 注意事项#

OpenCV 要求图像采用 BGR 格式,而相机可能会输出以下格式:

  • Mono(灰度)
  • Bayer
  • RGB

将图像转换为与 OpenCV 兼容的格式#

对于实时循环,建议使用 converter.ConvertToArray(grab_result):这会将转换后的像素直接写入预分配的 NumPy 数组中,并避免了对 converter.Convert(grab_result).Array (看 处理图像 的额外复制(详见)

converter = pylon.ImageFormatConverter()
converter.OutputPixelFormat = pylon.PixelType_BGR8packed
image = converter.ConvertToArray(grab_result)

实时显示循环#

import cv2
from pypylon import pylon

with pylon.InstantCamera(pylon.FirstFound) as camera:
    camera.StartGrabbing(pylon.GrabStrategy_LatestImageOnly)

    while camera.IsGrabbing():
        with camera.RetrieveResult(5000) as grab_result:
            if grab_result.GrabSucceeded():
                image = grab_result.Array

                cv2.imshow("Live", image)

                if cv2.waitKey(1) == 27:  # ESC to exit
                    break

    cv2.destroyAllWindows()

典型的 OpenCV 操作#

灰度转换#

gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

边缘检测#

edges = cv2.Canny(image, 50, 150)

模糊/滤波#

blur = cv2.GaussianBlur(image, (5, 5), 0)

绘制叠加层#

cv2.rectangle(image, (50, 50), (200, 200), (0, 255, 0), 2)

结合使用 NumPy 和 OpenCV#

此示例演示了一个结合了 pypylon、NumPy 和 OpenCV 的完整机器视觉处理流程。它从相机中连续采集图像,提取固定的兴趣区域 (ROI),计算简单的统计数据(平均亮度),并直接在实时图像中可视化结果。

具体步骤如下:

  1. 使用 NumPy 切片定义并提取 ROI。
  2. 计算 ROI 的平均亮度。
  3. 使用 OpenCV 矩形叠加层可视化 ROI。
  4. 在图像上显示基于简单规则的决策结果(“明亮区域”)。

此模式代表了常见的实际工作流程:

Acquire → Select ROI → Compute Feature → Visualize → Decide
import cv2
from pypylon import pylon
import numpy as np

with pylon.InstantCamera(pylon.FirstFound) as camera:
    camera.StartGrabbing(pylon.GrabStrategy_LatestImageOnly)

    while camera.IsGrabbing():
        with camera.RetrieveResult(5000) as grab_result:
            if grab_result.GrabSucceeded():
                image = grab_result.Array

                # Define ROI coordinates
                y1, y2 = 100, 200
                x1, x2 = 200, 300

                # Extract ROI
                roi = image[y1:y2, x1:x2]

                # Compute statistics
                mean = np.mean(roi)

                # Draw rectangle around ROI
                cv2.rectangle(image, (x1, y1), (x2, y2), (0, 255, 0), 2)

                if mean > 100:
                    cv2.putText(image, "Bright Region", (50, 50),
                                cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2)

                cv2.imshow("Live", image)

                if cv2.waitKey(1) == 27:
                    break

    cv2.destroyAllWindows()

核心要点#

  • pypylon 通过 NumPy 与 OpenCV 无缝集成。
  • 通常需要进行色彩转换。
  • OpenCV 提供了强大的可视化和处理工具。
  • 结合使用 NumPy 和 OpenCV 可以构建灵活的处理流程。