Я хочу знать, почему созданный мной проигрыватель изображений не работает должным образом с окном большого размера (окно> 8K) - PullRequest
0 голосов
/ 05 марта 2020

Я использую python 3.7.6 и openCV. Я хочу отображать изображения большого размера (8K bmp) кадр за кадром, как анимация. (Но я не могу сделать их как видео. Я должен сохранить все данные пикселей). Поэтому я сделал проигрыватель изображений, используя python и openCV, и он хорошо работает при обычном размере окна (окно 2 ~ 5 КБ), но как только я играю в полноэкранном режиме на 8K-дисплее, частота кадров падает до 5 кадров в секунду. Я пытался с другими форматами изображений (например, JPEG, PNG), но как только увеличить размер окна, он работает так же с BMP.

Я хочу знать 1), почему его частота кадров падает в большом окне? 2) как я могу сделать проигрыватель изображений, отображающий изображения со скоростью не менее 15 кадров в секунду в окне 8K.

вот код

import numpy as np
import cv2 
import time


#variable setting

s=input('how many frames you want to play?(type in int.): ')

print('  display images in %sHz.' %s)

p=input('How many images you want to play?(type in int): ')

print('  program will read %s images.' %p)    

t=input('what is the format of images?(0:png,1:bmp,2:jpg): ')

if t=='0':
    t='png'
elif t=='1':
    t='bmp'
elif t=='2':
    t='jpg'
else:
    t='png'

print('  image format is %s.' %t)

q=input('What type of display you want?(0: FULL, 1.NORMAL, 2: AUTO): ')

if q=='0':
    cv2.namedWindow('test',cv2.WND_PROP_FULLSCREEN)
    cv2.moveWindow('test',0,0)
    cv2.setWindowProperty('test', cv2.WND_PROP_FULLSCREEN, cv2.WINDOW_FULLSCREEN)
    print('  FULLSCREEN MODE.')
elif q=='1':
    cv2.namedWindow('test',cv2.WND_PROP_FULLSCREEN)
    cv2.moveWindow('test',0,0)
    cv2.setWindowProperty('test', cv2.WND_PROP_FULLSCREEN, cv2.WINDOW_NORMAL)
    print('  NORMAL MODE.')
elif q=='2':
    cv2.namedWindow('test',cv2.WND_PROP_FULLSCREEN)
    cv2.moveWindow('test',0,0)
    cv2.setWindowProperty('test', cv2.WND_PROP_FULLSCREEN, cv2.WINDOW_AUTOSIZE)
    print('  AUTOSIZE MODE.')

refresh_hz = int(s) #frequency of image playing
delay = (1/refresh_hz*1000)/1000
print('interval: %.2f s' %delay)
total_img = int(p) #total number of images
count = 0 
flag = 0
start = time.time()


#image read
img = []

for i in range(1,total_img+1):
    #r_image=("./source_image/%d.%s" %(i,t))
    r_image=("./%s_img/%d.%s" %(t,i,t))
    #r_image=("./img/%d.%s" %(i,t))
    print('reading %dth image' %i)
    temp = cv2.imread(r_image)
    img.append(temp) 


print('Completed to read %d images.' %total_img)
print('It will play %d images in %dHz.' %(total_img, refresh_hz))
print("If you want to quit, hit Escape. Thanks")


#Image Player
while True:

    current = time.time()
    a= current-start

    if( a >= delay ):
        cv2.imshow('test', img[count])
        freq=1/a
        print('interval: %.3f / freq : %.3f Hz' %(a, freq))

        if(flag == 0):
            count = count +1
            if (count > total_img -2):
                flag = 1

        elif(flag == 1):
            count=count-1
            if (count < 1):
                flag = 0

        start = time.time()

    k=cv2.waitKey(1)
    if(k==27):
        break

#Quit
cv2.destroyAllWindows()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...