我已经开发了一个使用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()

10-06 10:36
查看更多