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



我使用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

这是不言自明的,因为我正在尝试上传一个"橙色.jpg"文件,当按下"w"时。

我真正的问题是:如何以这样的方式设计程序,用户不必按两次键,一个键关闭图像文件,另一个键打开文件。这会使设计失败,因为我希望处理在一次击键中完成。即使用户按"w"并且已经上传了"橙色.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()

我已经解决了这个问题:

import sys
import cv2
import os
def main():
    File_Lst =[]
    plat = sys.platform
    #print plat
    if plat == 'win32': #for windows operating system
        File_dir = "C:\Users\user\Desktop\fruit\"

    elif plat == 'linux2': # for linux
        File_dir = "/host/Users/user/Desktop/fruit/"
    for file in os.listdir(File_dir):
        File_Lst.append(file)
    print File_Lst

    welcome_index = File_Lst.index('welcome.jpg')           
    welcome_str = File_Lst[welcome_index]
    orange_index = File_Lst.index('orange.jpg')         
    orange_str = File_Lst[orange_index]

    apple_index = File_Lst.index('apple.jpg')           
    apple_str = File_Lst[apple_index]
    banana_index = File_Lst.index('banana.jpg')         
    banana_str = File_Lst[banana_index]
    doughnuts_index = File_Lst.index('doughnuts.jpg')           
    doughnuts_str = File_Lst[doughnuts_index]
    img = cv2.imread(File_dir + welcome_str )
    cv2.destroyAllWindows()         
    cv2.imshow("Press KEYS to know which food is good or bad", img)
    while True:
        k = cv2.waitKey(0)
        if k == ord('w'): # wait for 'w' key to upload orange nutrition information
            img = cv2.imread(File_dir + orange_str) 
            newx,newy = img.shape[1]/2,img.shape[0]/2 #new size (w,h)
            img = cv2.resize(img,(newx,newy))
            cv2.destroyAllWindows()     
            cv2.imshow("Orange Nutritional Information", img)
        elif k == ord('a'): # wait for 'w' key to upload apple nutrition information
            img = cv2.imread(File_dir + apple_str)  
            newx,newy = img.shape[1]/2,img.shape[0]/2 #new size (w,h)
            img = cv2.resize(img,(newx,newy))
            cv2.destroyAllWindows()     
            cv2.imshow("Apple Nutritional Information", img)
        elif k == ord('s'): # wait for 'w' key to upload apple nutrition information
            img = cv2.imread(File_dir + banana_str) 
            newx,newy = img.shape[1]/2,img.shape[0]/2 #new size (w,h)
            img = cv2.resize(img,(newx,newy))
            cv2.destroyAllWindows()     
            cv2.imshow("Banana Nutritional Information", img)

        elif k == 32:
            break
            cv2.destroyAllWindows()
        else:
            img = cv2.imread(File_dir + doughnuts_str)
            cv2.destroyAllWindows()
            cv2.imshow("Bad, Have good eating habits CHUMP", img)
            continue    



main()

我正在销毁每个图像显示的窗口,这样,每个击键对应于新图像上传的一致性得到保持

相关内容

  • 没有找到相关文章

最新更新