【opencv-python】16:9のカメラ入力を1:1に切り取る 切り取り位置によってカメラを動かしたようになります

はじめに

前回なんちゃってズームのスクリプトを書きました。
touch-sp.hatenablog.com



今回は16:9の入力を1:1に切り取ります。切り取り位置を変更することによってカメラを動かしたようになります。


Web会議などでは1:1で問題ありません。切り取り位置を調整することでつねに自分を真ん中に映せます。

Pythonスクリプト

import cv2

leftside  = 280

w=1280
h=720
cap = cv2.VideoCapture(0)
cap.set(cv2.CAP_PROP_FOURCC, cv2.VideoWriter_fourcc('M', 'J', 'P', 'G'))
cap.set(cv2.CAP_PROP_FRAME_WIDTH, w)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, h)

while True:
    ret, frame = cap.read()
    
    frame = frame[:, leftside:leftside+720, :]

    cv2.imshow('demo', frame)   

    k = cv2.waitKey(1) & 0xFF
    if k == 27:
        break
    elif k == ord('a'):
        if leftside < 560:
            leftside += 70
    elif k == ord('d'):
        if leftside > 0:
            leftside -= 70

cap.release()
cv2.destroyAllWindows()

スクリプトの解説

1:1に切り取る

たったの1行です。

frame = frame[:, leftside:leftside+720, :]

キーボード入力で切り取り位置を変更する

「a」「d」で変更
「Esc」で終了

    k = cv2.waitKey(1) & 0xFF
    if k == 27:
        break
    elif k == ord('a'):
        if leftside < 560:
            leftside += 70
    elif k == ord('d'):
        if leftside > 0:
            leftside -= 70