OpenCVとの統合#
OpenCVを使用する理由#
OpenCVは、最も広く使用されているコンピュータビジョンライブラリの1つです。次のような機能を提供します。
- 高速な画像処理アルゴリズム
- 可視化ツール
- 特徴検出、フィルタリング、および解析のサポート
- NumPyとの相互運用性
pypylonの画像はすでにNumPy配列であるため、統合はシームレスです。
基本ワークフロー#
簡単な例#
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の処理#
グレースケール変換#
エッジ検出#
ぼかし/フィルタリング#
オーバーレイの描画#
NumPyとOpenCVの組み合わせ#
このサンプルは、pypylon、NumPy、OpenCVを組み合わせた完全なビジョンパイプラインを示しています。カメラから画像を継続的に取得し、固定のROIを抽出し、簡単な統計(平均輝度)を計算して、その結果をライブ画像内に直接可視化します。
手順は以下の通りです:
- NumPyのスライスを使用してROIを定義および抽出します。
- ROIの平均輝度が計算されます。
- OpenCVの矩形オーバーレイを使用してROIが可視化されます。
- 簡単なルールベースの判定(「明るい領域」)の結果が画像に表示されます。
このパターンは、実際の現場でよく見られるワークフローを表しています:
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を組み合わせることで、柔軟なパイプラインが可能になります。