我正在尝试使用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")
答案 0 :(得分:1)
waitKey
不会关闭窗口,它会在指定时间内停止程序。这也是显示图像的必要步骤。
为了您的目的,您可以使用cv2.waitKey(1)
。这将显示图像,然后提示您输入而不必先按任何键。图片窗口不会关闭。
如果要在提示前关闭图像,则可以使用cv2.destroyWindow([window_name])
关闭特定窗口。
在您的情况下为cv2.destroyWindow('Test')
。
查看代码还有2个问题:
cv2.imread('path')
“路径”需要替换为图像路径。这是相对于脚本而言的,因此,如果图像位于同一文件夹中,则“ [image_name] .jpg”(或.png等)就足够了,但是完整路径始终有效。
您需要将input("What can you see here?")
的结果存储在变量中。请参见示例代码中的实现。
适用于我的示例代码:
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后,图像窗口关闭,并显示对/错。