OpenCVとの連携 -- カメラ画像からのエッジ検出


OpenCV を用いてカメラから画像を取り込み、相関エッジ検出を行った後、 エッジ検出結果をリアルタイムに表示するサンプルコードです。

本サンプルの実行には OpenCV から使用できるカメラが必要です。 また、予め opencv-python をインストールしておく必要があります。 pip コマンドを使用する場合、次のようにインストールしてください。

pip install opencv-python==4.2.0.34

コード

import pyfie
import cv2

# 利便のため PyFIE 関数が返すエラーコードに応じて例外を発生させる機能を有効化
pyfie.ctrl.enable_f_err_exception(True)

# 相関エッジパラメータとエッジ格納用変数を用意
edge_param = pyfie.F_EDGE_CORR_PARAMS(
    width=13,
    height=5,
    var_threshold=25.0,
    sigmoid_k=1.0,
    mag_threshold=160,
    nms_length=6,
)
edges = pyfie.F_EDGE.PTR()
nedges = pyfie.INT()

# カメラをオープン
cap = cv2.VideoCapture(0)

while(True):
    # カメラから画像を取得
    read_success, frame = cap.read()
    if not read_success:
        break

    # グレースケール変換
    frame_gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

    # 相関エッジ検出
    pyfie.fnFIE_edge_corr(
        frame_gray, None, edge_param,
        pyfie.F_EDGE_FEAT_NONE, pyfie.F_BORDER_NONE, (0, 0),
        edges, nedges
    )

    # エッジを赤色で描画。OpenCVではカラー格納順序がBGRであることに注意
    for e in edges[:nedges]:
        cv2.circle(frame, (e.x, e.y), 1, (0, 0, 255), -1)

    # エッジ配列のメモリを解放
    edges.fnOAL_free()

    # エッジ画像を表示
    cv2.imshow("corr edge detection", frame)

    key = cv2.waitKey(5) & 0xFF
    # ESCキーが押下されれば処理終了
    if key == 27:
        break

cv2.destroyAllWindows()

スクリーンショット

../../_images/sample_opencv_videocapture_ss.jpg

ダウンロード