Pyqt5 实时图像滚动
实时图像
写了一个关于实时图像滚动显示的例子,做个记录。
滚动算法:

难点:
将内存数据绘制到界面,需要用到QImage和QPixmap,使用QImage转换一下,具体参见代码。这个费了好大劲才弄出来(网上的资料大都很简单,处理个QImage打开保存啊等等操作,项目实用性不强。)
from PIL import Image
import numpy as np
import threading
import time
class GraphicWidget(QWidget):
def __init__(self):
super(GraphicWidget,self).__init__()
self.threadStop = False
self.drawWidth = 1080
self.drawHeight = 800
self.imgWholeData = None
self.imgScreenData = np.zeros([self.drawHeight,self.drawWidth],np.uint8)
self.imgTotalLines = 0
self.imgWidth = 0
self.threadStop = True
pass
def doscroll(self):
if self.threadStop:
img = Image.open("d:/test2.png")
self.imgWholeData = np.array(img)
self.imgTotalLines, self.imgWidth = self.imgWholeData.shape
scrollThread = threading.Thread(target = self.scroll)
scrollThread.start()
def stop(self):
self.threadStop = True
def scroll(self):
step = 5
srcStartLine = 0
srcEndLine = step
destEndLine = step
self.threadStop = False
while not self.threadStop:
if destEndLine > self.drawHeight:
destEndLine = self.drawHeight
if srcEndLine > self.drawHeight:
srcStartLine = srcEndLine - self.drawHeight
if srcEndLine > self.imgTotalLines:
print("scroll end")
self.threadStop = True
break
if srcStartLine < self.drawHeight:
self.imgScreenData = np.zeros([self.drawHeight,self.drawWidth],np.uint8)
self.imgScreenData[0:destEndLine] = self.imgWholeData[srcStartLine:srcEndLine]
self.update()
destEndLine = destEndLine + step
srcEndLine = srcEndLine + step
time.sleep(0.005)
pass
def paintEvent(self,event):
try:
painter = QPainter()
destRect = QRect(0,0,self.drawWidth,self.drawHeight)
srcRect = QRect(0,0,self.drawWidth,self.drawHeight)
img = QImage(self.imgScreenData.data, self.drawWidth, self.drawHeight, QImage.Format_Indexed8)
pix = QPixmap.fromImage(img)
painter.begin(self)
painter.drawPixmap(destRect, pix, srcRect)
painter.end()
except Exception as e:
print(e)
raise
Pass
经验证,图像“拖尾”比较严重,图像滚动平滑效果比不上用DirectX做的效果,但是刷新效率很高,QT这块做的比C#好很多。
下次,实用Opengl做一个,看看效果咋样。
Pyqt5 实时图像滚动的更多相关文章
- 基于FPGA的线阵CCD实时图像采集系统
基于FPGA的线阵CCD实时图像采集系统 2015年微型机与应用第13期 作者:章金敏,张 菁,陈梦苇2016/2/8 20:52:00 关键词: 实时采集 电荷耦合器件 现场可编程逻辑器件 信号处理 ...
- PyQt5实时汇率查询
用PyQt5实现了界面,使用urllib实时抓取ip138.com网站的汇率信息. import sys import urllib import urllib.request from PyQt5. ...
- 在python3下使用OpenCV 抓取摄像头图像并实时显示3色直方图
以下代码为在Python3环境下利用OpenCV 抓取摄像头的实时图像, 通过OpenCV的 calHist函数计算直方图, 并显示在3个不同窗口中. import cv2 import numpy ...
- 动手写一个快速集成网易新闻,腾讯视频,头条首页的ScrollPageView,显示滚动视图
最终效果 更新示例.gif 示例效果.gif 示例效果1.gif 示例效果2.gif 示例效果3.gif 示例效果4.gif 示例效果5.gif 示例效果6.gif 一.构思部分: 打算分为三个部分, ...
- 基于邮件系统的远程实时监控系统的实现 Python版
人生苦短,我用Python~ 界内的Python宣传标语,对Python而言,这是种标榜,实际上,Python确实是当下最好用的开发语言之一. 在相继学习了C++/C#/Java之后,接触Python ...
- 图像采集系统的Camera Link标准接口设计
高速数据采集系统可对相机采集得到的实时图像进行传输.实时处理,同时实现视频采集卡和计算机之间的通信.系统连接相机的接口用的是Camera Link接口,通过Camera Link接口把实时图像高速传输 ...
- HAAR与DLib的实时人脸检测之实现与对比
人脸检测方法有许多,比如opencv自带的人脸Haar特征分类器和dlib人脸检测方法等. 对于opencv的人脸检测方法,优点是简单,快速:存在的问题是人脸检测效果不好.正面/垂直/光线较好的人脸, ...
- Python-opencv摄像头图像捕获
实例一 (灰色调度) #!/usr/bin/env python # _*_ coding:utf-8 _*_ import cv2 as cv import numpy as np capture ...
- 【iOS开发-55】图片轮播案例:scrollView的分页、滚动栏、利用代理控制定时器和Page Control以及多线程问题
案例: (1)用storyboard布局,这里用了三样东西. --UIScrollView就是我们准备存放滚动图片的容器. --Page Control就是控制页数的那几个小点点.能够设置有多少个点. ...
随机推荐
- table 的thead th 固定 tbody滚动例子
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- C#封装加密算法(MD5、SHA、HMAC、DES、RSA)的一个类
using System; using System.IO; using System.Security.Cryptography; using System.Text; namespace Wen. ...
- JDk 内部分工具 简述
jar — 一个创建和管理 jar 文件的工具. java — Java 应用启动器.在这篇文章里,开发和部署都是用的这个启动器. javac — Java 编译器. javadoc — API 文档 ...
- jmeter参数化数据(_csvread函数、用户自定义变量等)
以下是转载内容,仔细看过后,觉得用得最多的应该是csvread函数.用户自定义变量以及CSV DATA CONFIG控制器这几个,但是做练习之后,在结果树和聚合报告中怎么查看执行结果是个问题,没找到对 ...
- java版本 ueditor 在线编辑器 配置
上传文件大小的配置 1. ueditor\dialogs\video\video.js 搜索 file_size_limit 修改这个数值 (这是前台 flash的限制) 2. ueditor ...
- linux系统下安装apache与tomcat
apache的安装 把安装包放到/soft 下 [root@localhost ~]#cd /soft [root@localhost soft]#tar jxvf httpd-2.2.25.tar. ...
- BBC 生命大设计
BBC霍金的生命的意义一视频中,有一段图案特别漂亮,于是我就写了一下,具体的繁殖规则是这样的:有存活体和死方格两个部分构成,我分别用 ' * ' 和 ‘ ’ 表示.当一个存活体周围有超过三个存活体时 ...
- COCOS2D-X 精灵创建随笔
CCSprite类中创建Sprite的方法都是静态的: static CCSprite* create ( ) 创建一个无图片显示的精灵,可随后用 setTexture 方法设置显示图片 stati ...
- 将PL/SQL代码封装在机灵的包中
将代码封装在机灵的包中 http://www.oracle.com/technetwork/issue-archive/2013/13-jan/o13plsql-1872456.html 绝大多数基于 ...
- (转)Spring 读书笔记-----使用Spring容器(一)
Spring有两个核心接口:BeanFactory和ApplicationContext,其中ApplicationContext是BeanFactory的子接口.他们都可代表Spring容器,Spr ...