import cv2
# 選擇第1隻攝影機
cap = cv2.VideoCapture(0)
# 從攝影機擷取一張影像
ret, frame = cap.read()
# 在圖片上畫一條紅色的對角線,寬度為 5 px
cv2.line(frame, (0, 0), (255, 255), (0, 255, 255), 5)
# 寫入圖檔
cv2.imwrite("oc01.png", frame)
# 釋放攝影機
cap.release()
cv2.destroyAllWindows()
|
import cv2
cap = cv2.VideoCapture(0)
# 設定擷取影像的尺寸大小
# 800x600, 1024x768, 1280x720(HD720), 1920x1080(HD1080)
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 1280)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 720)
def decode_fourcc(v):
v = int(v)
return "".join([chr((v >> 8 * i) & 0xFF) for i in range(4)])
# 取得影像的尺寸大小
w = cap.get(cv2.CAP_PROP_FRAME_WIDTH)
h = cap.get(cv2.CAP_PROP_FRAME_HEIGHT)
print("Image Size: %d x %d" % (w, h))
# 取得 Codec 名稱
fourcc = cap.get(cv2.CAP_PROP_FOURCC)
codec = decode_fourcc(fourcc)
print("Codec: " + codec)
cap.release()
|
Image Size: 1280 x 720 Codec: YUYV |
import cv2
# 開啟影片檔案
cap = cv2.VideoCapture('firework.mp4')
# 以迴圈從影片檔案讀取影格,並顯示出來
while(cap.isOpened()):
ret, frame = cap.read()
# 從檔案輸入的影格可以imshow直接顯示
if(ret):
cv2.imshow('frame',frame)
else: break
if cv2.waitKey(1) & 0xFF == ord('q'):
break
print('cap done')
cv2.destroyAllWindows()
cap.release()
|
import cv2
cap = cv2.VideoCapture('firework.mp4')
# 取得影像的尺寸大小
w = cap.get(cv2.CAP_PROP_FRAME_WIDTH)
h = cap.get(cv2.CAP_PROP_FRAME_HEIGHT)
# 記得長寬要先改成整數
print(type(w)); w=int(w); h=int(h)
print("Image Size: %d x %d" % (w, h))
# 使用 XVID 編碼
fourcc = cv2.VideoWriter_fourcc(*'XVID')
# FPS 值為 20.0,解析度為 w x h
# 要寫成灰階輸出的檔案必須在長寬(w,h)之後加個零 ,0)
out = cv2.VideoWriter('oc04d.avi', fourcc, 20.0, (w,h),0)
while(cap.isOpened()):
ret, frame = cap.read()
if ret == True:
# 轉為灰階並寫入
frame2 = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
out.write(frame2)
#cv2.imshow('frame',frame2)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
else:
break
# 釋放所有資源
cap.release()
out.release()
cv2.destroyAllWindows()
|
import cv2
vid='FULL15'
fn=vid+'.mp4'
cap = cv2.VideoCapture(fn)
NF=0
while True:
ret,frame = cap.read()
NF+=1
if(ret):
cv2.imshow('frame',frame)
fw=vid+'_'+str(NF).zfill(3)+'.png'
cv2.imwrite(fw,frame)
print(NF,fw)
else: break
if cv2.waitKey(1) & 0xFF == ord('q'): break
print('cap done')
cv2.destroyAllWindows()
cap.release()
|
import cv2
import time
mp4='FULL15'
sec=23
dir=mp4+'/FULL15_'
fn=mp4+'.mp4'
cap = cv2.VideoCapture(fn)
fps = cap.get(cv2.CAP_PROP_FPS)
size = (int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)),
int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)))
length = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))
print(fn,': fps=',fps,' size=',size,' sec=',sec,' length=',length)
fps=int(length/sec); spf=round(sec/length,3)
ds=0.1; SR=int(ds/spf)
print( length,'estimated from total length, FR=',fps,' spf=',spf,' SR=',SR)
def FR(cap):
# Number of frames to capture
num_frames = 120;
print("Capturing {0} frames".format(num_frames))
start = time.time()
for i in range(0, num_frames) :
ret, frame = cap.read()
end = time.time()
seconds = end - start
print ("Time taken : {0} seconds".format(seconds))
fps = num_frames / seconds
print("Estimated from 120 frames, fps= : {0}".format(fps))
FR(cap)
NR=0; NF=0
while(cap.isOpened()):
ret, frame = cap.read()
NR+=1
if(ret):
cv2.imshow('frame',frame)
if(NR%SR==0):
NF+=1
cv2.imwrite(dir+str(NF).zfill(3)+".jpg",frame)
print('NR=',NR,' NF=',NF)
else: break
if cv2.waitKey(1) & 0xFF == ord('q'):
break
print('cap done')
cv2.destroyAllWindows()
cap.release()
|
import cv2
cap = cv2.VideoCapture(0)
# 設定擷取影像的尺寸大小
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 640)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 360)
# 使用 XVID 編碼
fourcc = cv2.VideoWriter_fourcc(*'XVID')
# 建立 VideoWriter 物件,輸出影片至 output.avi
# FPS 值為 20.0,解析度為 640x360
out = cv2.VideoWriter('oc04.avi', fourcc, 20.0, (640, 360))
t=0
while(t<400 and cap.isOpened()):
#if(t%100 == 0): print(t)
ret, frame = cap.read()
t+=1
if ret == True:
# 寫入影格
out.write(frame)
#cv2.imshow('frame',frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
else:
break
# 釋放所有資源
cap.release()
out.release()
cv2.destroyAllWindows()
|
import cv2
import time
cap = cv2.VideoCapture(0)
# 設定擷取影像的尺寸大小
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 640)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 360)
# 使用 XVID 編碼
fourcc = cv2.VideoWriter_fourcc(*'XVID')
# 建立 VideoWriter 物件,輸出影片至 output.avi
# FPS 值為 20.0,解析度為 640x360
out = cv2.VideoWriter('output2.avi', fourcc, 20.0, (640, 360))
t=0
while(t<400 and cap.isOpened()):
ret, frame = cap.read()
if ret == True:
# 寫入影格
#print('t=',t,ret)
out.write(frame)
#cv2.imshow('frame',frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
else:
break
t+=1
# 釋放所有資源
cap.release()
out.release()
cv2.destroyAllWindows()
|
import cv2
cap = cv2.VideoCapture('firework-2.mp4')
while(cap.isOpened()):
ret, frame = cap.read()
frame2=cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
cv2.imshow('frame',frame2)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
|
import cv2
import numpy as np
import os
# 影片檔案
videoFile = "op4B.avi"
# 輸出目錄
outputFolder = "my_output"
# 自動建立目錄
if not os.path.exists(outputFolder):
os.makedirs(outputFolder)
# 開啟影片檔
cap = cv2.VideoCapture(videoFile)
# 取得畫面尺寸
width = cap.get(cv2.CAP_PROP_FRAME_WIDTH)
height = cap.get(cv2.CAP_PROP_FRAME_HEIGHT)
# 計算畫面面積
area = width * height
# 初始化平均畫面
ret, frame = cap.read()
avg = cv2.blur(frame, (4, 4))
avg_float = np.float32(avg)
# 輸出圖檔用的計數器
outputCounter = 0
while(cap.isOpened()):
# 讀取一幅影格
ret, frame = cap.read()
# 若讀取至影片結尾,則跳出
if ret == False:
break
# 模糊處理
blur = cv2.blur(frame, (4, 4))
# 計算目前影格與平均影像的差異值
diff = cv2.absdiff(avg, blur)
# 將圖片轉為灰階
gray = cv2.cvtColor(diff, cv2.COLOR_BGR2GRAY)
# 篩選出變動程度大於門檻值的區域
ret, thresh = cv2.threshold(gray, 25, 255, cv2.THRESH_BINARY)
# 使用型態轉換函數去除雜訊
kernel = np.ones((5, 5), np.uint8)
thresh = cv2.morphologyEx(thresh, cv2.MORPH_OPEN, kernel, iterations=2)
thresh = cv2.morphologyEx(thresh, cv2.MORPH_CLOSE, kernel, iterations=2)
# 產生等高線
cntImg, cnts, _ = cv2.findContours(thresh.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
hasMotion = False
for c in cnts:
# 忽略太小的區域
if cv2.contourArea(c) < 2500:
continue
hasMotion = True
# 計算等高線的外框範圍
(x, y, w, h) = cv2.boundingRect(c)
# 畫出外框
cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2)
if hasMotion:
# 儲存有變動的影像
cv2.imwrite("%s/output_%04d.jpg" % (outputFolder, outputCounter), frame)
outputCounter += 1
# 更新平均影像
cv2.accumulateWeighted(blur, avg_float, 0.01)
avg = cv2.convertScaleAbs(avg_float)
cap.release()
|