はじめに
調べた限りではタイトルにある通りopencv-pythonからWebカメラをズームさせることはできないようです。もし方法があればコメントで教えてくれたらうれしいです。代わりの方法として画像の中心を切り取ってもとのサイズまで拡大することでなんちゃってズームを導入しました。Pythonスクリプト
import cv2 cropscale = 0 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() if cropscale != 0: crop_h = 45 * cropscale crop_w = 80 * cropscale frame = cv2.resize(frame[crop_h:-crop_h, crop_w:-crop_w, :], dsize = (w, h)) cv2.imshow('zoom_test', frame) k = cv2.waitKey(1) & 0xFF if k == 27: break elif k == ord('w'): if cropscale < 4: cropscale += 1 elif k == ord('s'): if cropscale > 0: cropscale -= 1 cap.release() cv2.destroyAllWindows()
スクリプトの解説
Webカメラから解像度を指定して動画をキャプチャする
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)
詳細はこちらを参照して下さい。
切り取って拡大する
if cropscale != 0: crop_h = 45 * cropscale crop_w = 80 * cropscale frame = cv2.resize(frame[crop_h:-crop_h, crop_w:-crop_w, :], dsize = (w, h))
キーボード入力でズームの程度を変更する
「w」でズームイン「s」でズームアウト
「Esc」で終了
k = cv2.waitKey(1) & 0xFF if k == 27: break elif k == ord('w'): if cropscale < 4: cropscale += 1 elif k == ord('s'): if cropscale > 0: cropscale -= 1