最為簡單的是兩幀相減法:即前後兩幀相減,通過閾值選出一部分變化的畫素,當被選出的畫素比例大於閾值時,視為鏡頭轉換。
所以有兩個引數,要手工調,很不方便。(或許可以用深度學習試一試)
再者,當兩個鏡頭變化時,會有連續的幀出現變化,可以用出現變化的幀去抑制下一變化幀,從而只選取一幀。
import cv2
import numpy as np
cap = cv2.videocapture(
'./test.mp4'
)#閾值
compare=
30000
pixel_gate=
240width=
0height=
0area=
0scale=
0.5restrain=
1start=
1while cap.isopened():
#讀幀 _, frame = cap.read(
)if start:
#初始化
height =
int(frame.shape[0]
*scale)
width =
int(frame.shape[1]
*scale)
area=width*height
frame_pre=np.zeros(
(height,width)
) start=
0else
:#將縮小灰度化便於使用
frame_resize = cv2.resize(frame,
(width,height)
,interpolation=cv2.inter_cubic)
frame_gray = cv2.cvtcolor(frame_resize,cv2.color_rgb2gray)
frame_np=np.array(frame_gray)
result=frame_np-frame_pre
#比較閾值
count=
0for i in
range
(height)
:for j in
range
(width)
:if result[i]
[j]>pixel_gate:
count=count+
1 result[i]
[j]=
255else
: result[i]
[j]=
0#多個變化連續幀抑制
if count>
23000
and restrain:
print
(count)
restrain=
0else
: restrain=
1 cv2.imshow(
'compare'
,result)
cv2.imshow(
'frame'
,frame)
frame_pre=frame_np
cv2.waitkey(25)
cap.release(
)cv2.destroyallwindows(
)
悅 實現兩個數減法
將上述四個檔案放到同乙個資料夾下,比如我放到了桌面的test資料夾中,路徑 home clay 桌面 test 快捷鍵ctrl shift t開啟終端,進入到該路徑,命令如下 cd home clay 桌面 test接著輸入make執行程式,效果如下圖 接著輸入.sub執行可執行檔案,效果如下圖 按...
db2實現兩個數相減 DB2 日期相減 學步園
這篇短文是為那些剛接觸db2並想理解如何操作日期和時間的新手而寫的。使用過其它資料庫的大部分人都會很驚喜地發現在db2中操作日期和時間是多麼簡單。要使用 sql 獲得當前的日期 時間及時間戳記,請參考適當的db2暫存器 select current date from sysibm.sysdummy...
css實現兩邊固定,中間自適應
經常有需求,所以就總結一下,有需要的時候直接複製貼上啦 布局的原理是margin負值法。首先需要在center元素外部包含乙個div,包含div需要設定float屬性使其形成乙個bfc,並設定寬度,並且這個寬度要和left塊的margin負值進行配合,具體原理參考這裡。這裡對聖杯布局解釋特別詳細。h...