動画から直線を検出した覚書


import numpy as np
import cv2
import time

cam = cv2.VideoCapture('ファイルパス/sample.mp4')
#動画を取り込み
while(cam.isOpened()):# 動画終了まで繰り返し
    t = time.time()
    #時間測定
    ret, img = cam.read()
    #動画を画像に切り取り

    if not ret:
        break #動画が最後なら終了



    img = cv2.resize(img, (640, 380))
    #画像のリサイズ
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    #グレイスケール変換
    dst = cv2.Canny(gray, 150, 200)
    #輪郭検出(画像、外れ許容値(これ以上ならつなげる)、しきい値)

    if cv2.waitKey(1) & 0xFF == ord('q'): break
    #「q」が押されたら終了

    lines = cv2.HoughLinesP(dst, rho=1, theta=np.pi/360, threshold=30, minLineLength=20, maxLineGap=8)
    #輪郭画像から直線を検出 HoughLinesPは確率的探索
    #HoughLinesP(画像, rho=1, 検出角度, しきい値, 最小ライン長, 検出幅)
    for line in lines:
        x1, y1, x2, y2 = line[0]
        lines_img = cv2.line(img, (x1,y1), (x2,y2), (0,0,255), 2)
        #検出した線をimgに書き込み
    cv2.imshow("Frame", lines_img)
    cv2.imshow("Frame2", dst)
    print(time.time() - t, len(lines))

cv2.imwrite('lined_img.png', lines_img)
print(len(lines))
print(time.time() - t)
cam.release() #後処理
cv2.destroyAllWindows() #後処理

処理フレームレート30dpsくらい