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()