前回、画像の読み込みと保存の方法を学びましたが、カメラを通してフレームごとに画像を取得できますか?もちろんです!
カメラの電源を入れて画像を取得します
コードは次のように表示されます。
import cv2 as cv #导入cv模块
import numpy as np #np科学计数的包,通过numpy对数据进行处理
def video_demo():
capture = cv.VideoCapture(0) #打开和电脑上连接的相机
while(True):
ret,frame = capture.read() #ret是返回值,frame是视频中的每一帧
frame = cv.flip(frame, 1)
cv.imshow("video", frame) #将每一帧显示出来
c = cv.waitKey(1)
if c == 27:
break
capture.release()
video_demo() #调用获取视频方法
cv.destroyAllWindows() #释放所有的内存
スクリーンショットを実行します。
メソッドの説明:
1、capture = cv2.VideoCapture(0)
VideoCapture()のパラメーターは0で、これはノートブックの内蔵カメラを開くことを意味し、パラメーターは、capture = cv2.VideoCapture( "... / testなど、ビデオを開くためのビデオファイルパスです。 avi ")
2、ret、frame = catch .read()
Capture.read()は、ビデオをフレームごとに読み取ります。ret、frameは、capture.read()メソッドの2つの戻り値です。retがブール値の場合、読み取りフレームが正しい場合はTrueを返し、ファイルが最後まで読み取られた場合、その戻り値はFalseを返します。フレームは各フレームの画像であり、3次元マトリックスです。
3. cv :: flip()
cv :: flip()は、画像の反転(上下、左右、および両方)をサポートします。
0:y軸に沿って反転、0:x軸に沿って反転、<0:x軸とy軸に沿って反転
4. cv.waitKey(1)、waitKey()メソッド自体は、キーボード入力を待つことを意味します。
パラメータは1です。これは、ビデオの場合、1msの遅延で画像の次のフレームに切り替えることを意味します。
パラメータは0です。たとえば、cv.waitKey(0)は現在のフレーム画像のみを表示します。これは、ビデオの一時停止に相当します。
cv.waitKey(1000)のようにパラメーターが大きすぎると、遅延が長いためにスタックしたように感じます。
cは、キーボードから入力されたASCIIコードを取得します。escキーに対応するASCIIコードは27です。つまり、escキーを押すと、if条件文が確立されます。
5. release()を呼び出してカメラを解放し、destroyAllWindows()を呼び出してすべての画像ウィンドウを閉じます。