Я использую 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()