嘗試對視頻的一部分執行中位數計算。我已經想通了TI的部分,但不知道這是否是最有效的方式python opencv中位數電影
import cv2
camera = cv2.VideoCapture(videofile.h264)
for i in range(0,500):
(grabbed,frame) = camera.read(i)
if not grabbed:
break
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
medstack.append(gray)
medst = np.median(medstack,axis=0)
的代碼將打開第500幀,並將它們存儲在一個Python列表。然後是軸0的中值計算(據推測在整個堆棧中)。問題是,這結束與文件被轉換成與後計算
while (camera.isOpened()):
(grabbed,frame) = camera.read()
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
subframe = gray-medst
rgbframe = cv2.cvtColor(subframe,cv2.COLOR_GRAY2BGR)
out.write(rgbframe)
我想過轉換float64成UINT8來解決這個問題,但我也試圖將float64轉換成BGR食堂一個float64數組,代碼正在嘗試但未能完成。
爲什麼不將[中位數模糊](http://docs.opencv.org/3.1.0/d4/d86/group__imgproc__filter.html#ga564869aa33e58769b4469101aac458f9)從opencv直接添加到圖像之前? (它支持BGR圖像,但通道被分開處理) – api55
我需要保持圖像的分辨率,因爲我將在第二步中進行背景減除。該代碼將用於許多不同的視頻文件,每個視頻文件都有微小差異。最終目標是跟蹤,因此我認爲最好爲每個視頻計算中間幀並執行減法。 –
哦,我現在找到了你,所以你想得到所有圖像上的每個像素的中值,而不是同一圖像中的鄰域。那麼float64應該是numpy(參見[docs](https://docs.scipy.org/doc/numpy/reference/generated/numpy.median.html)) – api55