Python OpenCV:按下某个键时刷新图像

vam*_*afa 0 python opencv pygtk numpy python-2.7

我使用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
Run Code Online (Sandbox Code Playgroud)

这是自我解释,因为当我按下'w'时,我正在尝试上传'orange.jpg'文件.

我真正的问题是:如何以这种方式设计程序,用户不必按两次键,一键按下关闭图像文件,其他按键打开文件.这使设计失败,因为我想在一次击键中进行处理.即使用户按下'w'并且'orange.jpg'已经上传,也不会关闭此文件,该文件应该刷新.类似地,当用户按下'a',并且'orange.jpg'打开时,'orange.jpg'文件应该关闭,banana.jpg应该自动打开,这应该是一次操作.截至目前,我必须按两次键才能执行此任务.

我已经实现了代码,所以即使有人建议我去pygtk并通过按键使用它来上传图像,我也没有问题.我唯一的目标是破坏上传的图像而不会造成太多用户干扰,即处理应该是自主的.

正如beark所说,在程序中使用getch()意味着焦点将始终在控制台上.我对此并不满意,只想通过按键上传图像,但是控制台阻碍了这个动作.

谢谢.

ber*_*rak 6

首先,摆脱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()
Run Code Online (Sandbox Code Playgroud)