2017-10-10 8 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) 

ご提案がありますか? waitkey()コールで事前

+0

'cv2.waitKey(0)'は 'imshow()'の後にキーが押されるまで待つでしょう。 システム上のESCの正しい値が何であるか把握するために 'k'を表示してください。 – karlphillip

+0

"それは働いていないようです" - どんな意味で? |表示されるスクリプトの1つの明らかな問題は、 'imshow'の2回目の呼び出しの後に' waitKey'が存在しないことです。 (したがって、2番目の画像は表示されません) –

答えて

1

おかげで数が待機するミリ秒数です。

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の代わりに2番目のイメージが表示されるまで待機するミリ秒数を追加できます。キーを押すとimage2.jpgが読み取られますが、waitKeyが2番目のimshowの後になく、プログラムが終了するため、表示されません。

次のコードを試すことができます。このコードでは、「複数の画像」がフォルダ内にあり、画像を表示し、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 
関連する問題