在openCV

时间:2017-10-10 16:14:36

标签: python opencv

我想展示几张图片,暂停一下。 我已经尝试使用waitKey,等待用户按ESC,但它似乎没有工作。

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)

有什么建议吗?

提前致谢

4 个答案:

答案 0 :(得分:6)

在您发布的代码中,显示image1.jpg并等待用户按任意键,因为您已使用waitKey(0)0表示程序将等到用户点击密钥。您可以在显示第二个图像之前添加要等待的毫秒数,而不是0。按下某个键后,image2.jpg会被读取但不会显示,因为在第二个waitKey之后您没有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)

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

答案 1 :(得分:1)

waitkey()调用中,数字是等待的毫秒数。

答案 2 :(得分: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

答案 3 :(得分:0)

您可以在python中使用glob模块来选择所有文件

import cv2
import glob # get all files in the directory


images = glob.glob("path_to_files/*.jpg") #get all files with given extension

for img in range(len(images)):
    current_image = cv2.imread(images[img], 1) #cv2.imread(images[i], 0) # for image in grayscale
    cv2.imshow('Display Images', current_image)
    key = cv2.waitKey(300) #change to your own waiting time 1000 = 1 second 
    if key == 27: #if ESC is pressed, exit
        cv2.destroyAllWindows()
        break