2017-01-17 68 views
0

我使用的代码将输入视为视频文件,然后对视频应用图像处理(前景分割)。 我试图保存处理过的帧(输出),但我无法弄清楚如何使用循环做到这一点。循环保存生成的多个帧

while(1): 
    ret, frame = cap.read() 
    fgmask = fgbg.apply(frame) 
    cv2.imshow('frame',fgmask) 

    cv2.imwrite("frame.jpg", fgmask) 

代码的最后一行保存帧。但它目前仅保存最后生成的输出,因为没有循环来保存所有生成的帧。

如何使用循环保存所有处理的文件?

回答

3

引入一个计数器来更改文件名即可解决问题

cnt = 1 
while(1): 
    ret, frame = cap.read() 
    fgmask = fgbg.apply(frame) 
    cv2.imshow('frame',fgmask) 

    cv2.imwrite("frame" + str(cnt) + ".jpg", fgmask) 
    cnt += 1 
0

或者可以输出生成的帧的视频。

# Open the video writer 
out = cv2.VideoWriter('output.avi',-1, 1,(int(cap.get(cv2.cv.CV_CAP_PROP_FRAME_WIDTH)),int(cap.get(cv2.cv.CV_CAP_PROP_FRAME_HEIGHT)))) 

while(1): 
    ret, frame = cap.read() 
    fgmask = fgbg.apply(frame)  
    # Write the frame 
    out.write(fgmask) 

# Release the writer 
out.release()