利用python读取并显示图片的各种方式,通过读取大量图片不断播放形成播放的视频效果

参考:https://zhuanlan.zhihu.com/p/84511113

1.Pillow

from PIL import Image

img=Image.open('girl.jpg')
img.show()

在这里插入图片描述

2.matplotlib

import matplotlib.pyplot as plt
im = plt.imread('girl.jpg')
plt.imshow(im)
plt.show()

在这里插入图片描述

3.opencv

import cv2

img = cv2.imread('girl.jpg')
cv2.imshow('美女', img)
cv2.waitKey(0)

在这里插入图片描述

通过读取大量图片不断播放形成播放的视频效果

原始版本

    def Play(self):
        showinfo("提示", "开始播放")
        while self.now<self.len:
            img = cv2.imread(self.dir_path + self.s[self.now])  # 读取图片
            cv2.imshow("回放", img)  # 展示图片时窗口显示名称
            cv2.waitKey(100)  # 图像展示时间,单位:毫秒(ms)
            self.now+=1

        cv2.destroyAllWindows()
        cv2.waitKey(1)

加入按键控制,进行快进后退的控制

    def Play(self):
        showinfo("提示", "开始播放")
        while self.now<self.len:
            img = cv2.imread(self.dir_path + self.s[self.now])  # 读取图片
            cv2.imshow("回放", img)  # 展示图片时窗口显示名称
            key = cv2.waitKey(100)
            print('key =', key)
            #cv2.waitKey(100)  # 图像展示时间,单位:毫秒(ms)
            if key==112:#按键p
                self.stop_Play=1-self.stop_Play
            if key==113:#按键q
                break
            if key==2:#left
                self.now=max(self.now-10,0)
            if key==3:#right
                self.now=min(self.now+10,self.len-1)
            if self.stop_Play==1:
                self.now -= 1
            self.now+=1
            if self.now==self.len:
                self.now-=1

        cv2.destroyAllWindows()
        cv2.waitKey(1)

利用qt的处理方法

import os
import sys
from PyQt5.QtGui import QImage, QPixmap
#import neoapi
#import threading

from PyQt5 import *
from PyQt5 import QtWidgets, QtCore
from PyQt5.QtWidgets import QApplication, QLabel, QHBoxLayout
from PyQt5.QtCore import QTime, QTimer, QThread


class ImageWin(QtWidgets.QWidget):
    def __init__(self):
        super().__init__()
        self.setGeometry(0, 0, 2048, 1024)
        self.setAutoFillBackground(False)
        self.label = QLabel(self)

        self.label.resize(2048, 1024)
        self.layout = QHBoxLayout(self)
        self.layout.addWidget(self.label)
        # self.label.setGeometry(0,0,768,1024)

        self.timer = None

        self.camera = None

        self.showDir = None
        self.fileList = []

    def showImage(self, camera=None, id=""):
        self.setWindowTitle(id)
        self.camera = camera

        self.timer = QTimer()
        self.timer.timeout.connect(self.display)
        self.timer.start(100)
        self.label.setEnabled(True)

    def display(self):
        print('display')
        try:
            img = self.camera.GetImage()
            imgarray = img.GetNPArray()
            h, w = imgarray.shape[:2]
            # print(w,h)
            pixmap = QImage(imgarray, w, h, QImage.Format_BGR888)
            pixmap = QPixmap.fromImage(pixmap)
            self.label.setPixmap(pixmap)
        except TypeError:
            print('no frame!')

    def showImages(self, dir,suffix='.jpg'):

        self.showDir = dir
        self.setWindowTitle("replay")
        print('show dir:', self.showDir)
        if not os.path.exists(self.showDir):
            print("no such directory")
            return
        files = os.listdir(self.showDir)
        for file in files:
            if os.path.join(self.showDir, file).endswith('.jpg'):
                self.fileList.append(os.path.join(self.showDir, file))
                print(os.path.join(self.showDir, file))

        self.timer = QTimer()
        self.timer.timeout.connect(self.replay)
        self.timer.start(10)
        self.label.setEnabled(True)

    def replay(self):
        print("replay")
        if len(self.fileList) == 0:
            self.close()

        try:
            img = self.fileList[0]

            pixmap = QPixmap(img)
            self.label.setPixmap(pixmap)
            del (self.fileList[0])
        except:
            print('no picture')

    def keyPressEvent(self, event):
        if event.key() == QtCore.Qt.Key_Space:
            print("Space")
            self.close()
        if event.key() == QtCore.Qt.Key_Enter:
            print("Enter")
        if event.key() == QtCore.Qt.Key_Escape:
            self.close()

    def closeEvent(self, event):
        if self.timer is not None:
            self.timer.stop()
        event.accept()

if __name__=="__main__":

  app=QApplication(sys.argv)


  win=ImageWin()
  dir='/Users/wangyitian/FJTX/code/python/AI_Asian_Games/Competitions/24/24'
  win.showImages(dir)
  win.show()
  # cameraSetupWin.show()

  sys.exit(app.exec_())

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值