opencv:鼠标点击时保存图像

时间:2014-12-15 05:08:37

标签: python-2.7 opencv

所以我一直在搞乱opencv,并试图找出如何通过鼠标点击捕获图像。我看了一下,但我似乎无法找到答案。这是我到目前为止的代码。

import numpy as np
import cv2


def captureFrame(event,frame):
    if event == cv2.EVENT_LBUTTONDBLCLK:
        cv2.imwrite('pictures/testFrame.png',frame) # want to save frame here   

def main():
    cv2.setMouseCallback('frame',captureFrame)
    cap = cv2.VideoCapture(0)
    cv2.namedWindow('frame',cv2.CV_WINDOW_AUTOSIZE)

    while(True):
        ret, frame = cap.read()

        if ret:
            cv2.imshow('frame',frame)
            if cv2.waitKey(1) & 0xFF == ord('q'):
                break

    cap.release()
    cv2.destroyAllWindows()


if __name__ == "__main__":
    main()

问题是我想将帧传递给回调函数captureFrame,但我不知道该怎么做。谢谢!

1 个答案:

答案 0 :(得分:0)

好。所以我想出了如何做到这一点,我发布了下面的修复程序。

import numpy as np
import cv2

def main():
    cap = cv2.VideoCapture(0)
    cv2.namedWindow('frame',cv2.CV_WINDOW_AUTOSIZE)
    count = 1

    while(True):
        ret, frame = cap.read()
        cv2.setMouseCallback('frame',captureFrame,frame)

        if ret:
            cv2.imshow('frame',frame)
            if cv2.waitKey(1) & 0xFF == ord('q'):
                break

    cap.release()
    cv2.destroyAllWindows()

def captureFrame(event,x,y,flags,frame):
    if event == cv2.EVENT_LBUTTONDBLCLK:
        cv2.imwrite('pictures/test.png',frame) # want to save frame here


if __name__ == "__main__":
    main()

然而,这是非常反应迟钝的(因为我必须多次点击才能获得保存的图像,这可能是因为鼠标虽然很糟糕但我将不得不在以后测试)并且我还没有我弄明白了为什么呢。如果有人能解释为什么请这样做!