我已经开发了一个使用python opencv2模块的程序。
只要按下按键,程序就会上传图像。
这是伪代码:
import cv2
from msvcrt import getch
while True:
k = getch()
if k == 'w':
img = cv2.imread(filedir + orange.jpg)
cv2.namedWindow
cv2.imshow(img)
waitkey()
destroyAllWindows
elif k == 'a'
img = cv2.imread(filedir + banana.jpg)
cv2.namedWindow
cv2.imshow(img)
waitkey()
destroyAllWindows
这是不言自明的,因为当我按“w”时,我正在尝试上传“orange.jpg”文件。
我真正的问题是:如何以这样一种方式设计程序,即用户不必按两次键,一次按即可关闭图像文件,而另一次按即可打开文件。这使设计失败了,因为我希望一次敲击就可以进行处理。即使用户按下“w”并且“orange.jpg”已经上传,也应该刷新该文件而不是关闭该文件。同样,当用户按下“a”并且“orange.jpg”处于打开状态时,“orange.jpg”文件应被关闭,而banana.jpg应被自动打开,这应该是一次操作。到目前为止,我必须按两次键才能执行此任务。
我已经实现了代码,因此即使有人建议我去pygtk并通过使用该键来上载图像,也没有问题。我唯一的目标是销毁上传的图像,而不会受到太多用户的干扰,即处理应该是自主的。
正如beark所说,在程序中使用getch()意味着焦点将始终放在控制台上。我对此不满意,只希望通过按键上传图像,但是控制台阻碍了此操作。
谢谢。
最佳答案
首先,摆脱getch()。它仅在控制台窗口具有焦点时才起作用,这并不是真正可移植的。
使用waitKey()代替:
import cv2
cv2.namedWindow("lala")
img = cv2.imread(filedir + orange.jpg) # load initial image
while True:
cv2.imshow("lala", img)
# The function waitKey waits for a key event infinitely (when delay<=0)
k = chr(cv2.waitKey(100))
if k == 'w': # toggle current image
img = cv2.imread(filedir + orange.jpg)
elif k == 'a':
img = cv2.imread(filedir + banana.jpg)
elif k == 27: #escape key
break
cv2.destroyAllWindows()