Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python OpenCV图片卡住了_Python_Opencv_Queue - Fatal编程技术网

Python OpenCV图片卡住了

Python OpenCV图片卡住了,python,opencv,queue,Python,Opencv,Queue,我正在尝试用opencv制作一个小程序。基本上,它应该向用户显示一张图片,然后关闭它(或者最好让它打开,但这是另一个问题,因为我现在不知道如何在让图片打开的同时执行代码),然后问用户,他刚才看到了什么。为此,我使用imshow和waitKey。所有工作正常,但按下一个键后图片无法关闭。它卡住了。我想这是因为在那个命令之后是另一个要执行的代码 我想这是因为在那个命令之后是另一个要执行的代码 进口cv2 oriimg = cv2.imread('path') img = cv2.resize(ori

我正在尝试用opencv制作一个小程序。基本上,它应该向用户显示一张图片,然后关闭它(或者最好让它打开,但这是另一个问题,因为我现在不知道如何在让图片打开的同时执行代码),然后问用户,他刚才看到了什么。为此,我使用imshow和waitKey。所有工作正常,但按下一个键后图片无法关闭。它卡住了。我想这是因为在那个命令之后是另一个要执行的代码

我想这是因为在那个命令之后是另一个要执行的代码

进口cv2

oriimg = cv2.imread('path')
img = cv2.resize(oriimg,(360,480))
solutionimg = "Answer"
cv2.imshow('Test', img)
cv2.waitKey(0)
input("What can you see here?")


if input==solutionimg:
    cv2.destroyAllWindows()
    print("Right!")
else:
    cv2.destroyAllWindows()
    print("Wrong")

waitKey
不会关闭窗口,它会在指定的时间内停止程序。这也是显示图像的必要步骤。
出于您的目的,您可以使用
cv2.waitKey(1)
。这将显示图像,然后提示输入,而无需先按键。图像窗口将不会关闭

如果您希望在提示之前关闭图像,则可以使用
cv2.destroyWindow([window\u name])
关闭特定窗口。
在您的例子中,这是cv2.destroyWindow('Test')

文件:

查看您的代码还有两个问题:
cv2.imread('path')
需要将“path”替换为图像路径。这与脚本有关,因此如果图像位于同一文件夹中,则“[image\u name].jpg”(或.png,etc)就足够了,但完整路径始终有效。
您需要将
输入的结果(“您在这里可以看到什么?”)
存储在变量中。请参见示例代码中的实现

适用于我的示例代码:

    import cv2

    img = cv2.imread('image.jpg')
    solutionimg = "Answer"
    cv2.imshow('Test', img)
    cv2.waitKey(0)
    test = input("What can you see here?")

    if test == solutionimg:
            cv2.destroyAllWindows()
            print("Right!")
    else:
            cv2.destroyAllWindows()
            print("Wrong")

此代码读取并显示图像。当您按键时,它会提示您使用输入。在终端中单击以输入答案。按enter键后,图像窗口关闭并显示right/Error。

谢谢,这可以工作,但在等待提示时,图像窗口仍会冻结。我怎样才能解决这个问题?它提醒了我一些关于多线程(进程、队列等)的错误。。。但我不确定我是否完全理解。您尝试了什么实现?整个代码都在这里的主帖子中。我刚刚编辑了“cv2.waitKey(1)”。但在图片窗口打开并出现提示后,窗口将冻结,直到我在提示中写入内容,窗口将使用cv2关闭。destroyAllWindows()在您的问题中,您提到保持窗口打开,这就是为什么我建议首先使用
cv2.waitkey(1)
。如果希望窗口自动关闭,则必须在waitkey之后添加
cv2.destroyWindow('Test')
。另外,
cv2.waitkey(1)
在这种情况下不好,因为窗口将在1毫秒后关闭。因此,要么将其设置为0,使窗口通过按键关闭,要么将其设置为x毫秒。例如
cv2.waitkey(2000)
等待2秒。问题是它在1毫秒后不会关闭。它卡住了。这可能是因为在waitKey common之后有代码要执行?我不确定,这就是我要问的。另外,我只想在有人在提示中键入内容时关闭图片。这怎么可能?