Python 2.7 opencv:在鼠标上保存图像单击

Python 2.7 opencv:在鼠标上保存图像单击,python-2.7,opencv,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

所以我一直在摆弄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,但我不知道怎么做。谢谢

好的。因此,我想出了如何做到这一点,我张贴在下面的修复

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()
然而,它是相当无响应的(例如,我必须点击多次才能获得保存的图像,这可能是因为鼠标坏了,我将在以后测试),我还没有弄清楚原因。如果有人能解释为什么,请解释