使用opencv python绑定将网络摄像头中的帧保存到磁盘

使用opencv python绑定将网络摄像头中的帧保存到磁盘,python,opencv,webcam,Python,Opencv,Webcam,我正在尝试使用opencv将网络摄像头中的帧保存为JPG或PNG或其他格式。事实证明,这比我想象的要困难,尽管这里有这样的例子: 我正在尝试这样做: if __name__ == "__main__": print "Press ESC to exit ..." # create windows cv.NamedWindow('Raw', cv.CV_WINDOW_AUTOSIZE) cv.NamedWindow('Processed', cv.CV_WINDOW_AUTOSIZE) # c

我正在尝试使用opencv将网络摄像头中的帧保存为JPG或PNG或其他格式。事实证明,这比我想象的要困难,尽管这里有这样的例子:

我正在尝试这样做:

if __name__ == "__main__":
print "Press ESC to exit ..."

# create windows
cv.NamedWindow('Raw', cv.CV_WINDOW_AUTOSIZE)
cv.NamedWindow('Processed', cv.CV_WINDOW_AUTOSIZE)

# create capture device
device = 0 # assume we want first device
capture = cv.CaptureFromCAM(0)
cv.SetCaptureProperty(capture, cv.CV_CAP_PROP_FRAME_WIDTH, 640)
cv.SetCaptureProperty(capture, cv.CV_CAP_PROP_FRAME_HEIGHT, 480)


# check if capture device is OK
if not capture:
    print "Error opening capture device"
    sys.exit(1)

while 1:
    # do forever

    # capture the current frame
    frame = cv.QueryFrame(capture)
    if frame is None:
        break

    # mirror
    cv.Flip(frame, None, 1)

    # face detection
    detect(frame)

    # display webcam image
    cv.ShowImage('Raw', frame)

    # handle events
    k = cv.WaitKey(10)

    if k == 0x1b: # ESC
        print 'ESC pressed. Exiting ...'
        break

    if k == 0x63 or k == 0x43:
        print 'capturing!'
        s, img = capture.read()
        if s:
            cv.SaveImage("r'C:\test.jpg", img) 
正如你所看到的,当我按下字母c时,我试图让它捕捉一个图像,使用了Froyo在另一个问题中建议的代码修改。它不工作,我找不到使它工作的文档

请帮忙! 谢谢,
Alex

按如下方式更改您的保存部分:

if k == 0x63 or k == 0x43:
    print 'capturing!'
    cv.SaveImage("test.jpg",frame) 
这对我有好处。由于您已经捕获了要检测的帧,因此需要再次捕获以保存此帧


此外,cv.CaptureFromCam()和cv.VideoCapture()也不同。它们不能混淆。

还有一个问题,我是否可以在保存时裁剪相同的图像?最终,我会尝试裁剪检测到的人脸,这样我就有了单独的人脸文件。我口袋里有足够多的“谢谢”。也许你可以投你的一票。你说的“修剪”是什么意思?在视频播放期间或保存图像后进行裁剪?我希望输出的图片被裁剪,因此我不确定最好的方法是像现在这样保存文件,然后再次打开并裁剪,还是可以先保存裁剪后的版本。在某些情况下(裁剪等)cv.SaveImage(“test.jpg”,frame)给出了cv2中的错误。请将cv2.imwrite(“test.jpg”,frame)与cv2一起使用。