2017-10-10 283 views
2

我想顯示幾張圖像,在兩者之間進行暫停。 我嘗試過使用waitKey,等待用戶按ESC,但它似乎並沒有工作。在openCV中顯示圖像之間暫停

import numpy as np 
import cv2 

img = cv2.imread('image1.jpg',0) 
cv2.imshow('image',img) 


# here it should be the pause 
k = cv2.waitKey(0) 
if k == 27:   # wait for ESC key to exit 
    cv2.destroyAllWindows() 

img = cv2.imread('image2.jpg',0) 
    cv2.imshow('image',img) 

有什麼建議嗎?

在此先感謝

+0

'cv2.waitKey(0)'將等到在'imshow()'後面按下一個鍵。 打印'k'來找出系統中ESC的正確值。 – karlphillip

+0

「它似乎沒有工作」 - 在某種意義上? |您顯示的腳本的一個明顯問題是,第二次調用「imshow」後沒有「waitKey」。 (所以你不會看到第二個圖像) –

回答

1

waitkey()來電的電話號碼毫秒等待的次數。

1

將值添加到waitkey()將使其暫停給定的毫秒數。您可以使用itertools.cycle()來循環顯示圖像列表。

此腳本將暫停5秒,然後顯示下一張圖像。如果按下退出鍵,退出。

from itertools import cycle 
import cv2 


for image_filename in cycle(['image1.jpg', 'image2.jpg']): 
    image = cv2.imread(image_filename, 0) 
    cv2.imshow('image', image) 

    # Pause here 5 seconds. 
    k = cv2.waitKey(5000) 

    if k == 27:   # If escape was pressed exit 
     cv2.destroyAllWindows() 
     break 
0

在你發佈的代碼,image1.jpg顯示並等待用戶按任意鍵,因爲你已經使用waitKey(0)0表示程序將等待用戶點擊某個鍵。您可以在顯示第二個圖像之前添加要等待的毫秒數,而不是0。一旦按下了一個鍵,image2.jpg就會被讀取,但不會顯示,因爲在第二個imshow之後沒有waitKey,程序將退出。

您可以嘗試下面的代碼。此代碼假設您的「多個圖像」位於一個文件夾中,並顯示圖像,暫停3秒鐘並顯示下一個。

import cv2 
import os 

folder_path = ''#folder path to your images 

for path in os.listdir(folder_path):#loop to read one image at a time 
    imgpath = os.path.join(folder_path, path) 

    frame = cv2.imread(imgpath, 1) 

    cv2.imshow('Window', frame) 

    cv2.waitKey(3000)#pauses for 3 seconds before fetching next image 
    if key == 27:#if ESC is pressed, exit loop 
     cv2.destroyAllWindows() 
     break