实时图像

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

滚动算法:

难点:

将内存数据绘制到界面,需要用到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 实时图像滚动的更多相关文章

  1. 基于FPGA的线阵CCD实时图像采集系统

    基于FPGA的线阵CCD实时图像采集系统 2015年微型机与应用第13期 作者:章金敏,张 菁,陈梦苇2016/2/8 20:52:00 关键词: 实时采集 电荷耦合器件 现场可编程逻辑器件 信号处理 ...

  2. PyQt5实时汇率查询

    用PyQt5实现了界面,使用urllib实时抓取ip138.com网站的汇率信息. import sys import urllib import urllib.request from PyQt5. ...

  3. 在python3下使用OpenCV 抓取摄像头图像并实时显示3色直方图

    以下代码为在Python3环境下利用OpenCV 抓取摄像头的实时图像, 通过OpenCV的 calHist函数计算直方图, 并显示在3个不同窗口中. import cv2 import numpy ...

  4. 动手写一个快速集成网易新闻,腾讯视频,头条首页的ScrollPageView,显示滚动视图

    最终效果 更新示例.gif 示例效果.gif 示例效果1.gif 示例效果2.gif 示例效果3.gif 示例效果4.gif 示例效果5.gif 示例效果6.gif 一.构思部分: 打算分为三个部分, ...

  5. 基于邮件系统的远程实时监控系统的实现 Python版

    人生苦短,我用Python~ 界内的Python宣传标语,对Python而言,这是种标榜,实际上,Python确实是当下最好用的开发语言之一. 在相继学习了C++/C#/Java之后,接触Python ...

  6. 图像采集系统的Camera Link标准接口设计

    高速数据采集系统可对相机采集得到的实时图像进行传输.实时处理,同时实现视频采集卡和计算机之间的通信.系统连接相机的接口用的是Camera Link接口,通过Camera Link接口把实时图像高速传输 ...

  7. HAAR与DLib的实时人脸检测之实现与对比

    人脸检测方法有许多,比如opencv自带的人脸Haar特征分类器和dlib人脸检测方法等. 对于opencv的人脸检测方法,优点是简单,快速:存在的问题是人脸检测效果不好.正面/垂直/光线较好的人脸, ...

  8. Python-opencv摄像头图像捕获

    实例一 (灰色调度) #!/usr/bin/env python # _*_ coding:utf-8 _*_ import cv2 as cv import numpy as np capture ...

  9. 【iOS开发-55】图片轮播案例:scrollView的分页、滚动栏、利用代理控制定时器和Page Control以及多线程问题

    案例: (1)用storyboard布局,这里用了三样东西. --UIScrollView就是我们准备存放滚动图片的容器. --Page Control就是控制页数的那几个小点点.能够设置有多少个点. ...

随机推荐

  1. Nice validator领先的表单验证解决方案 转

    Nice validator是一个简单智能的Web表单验证插件,可以验证现有的所有格式,比如邮箱地址.电话号码等,您还可以自定义规则验证,插件基于jQuery库,支持多种语言配置. 安装 1.您可以访 ...

  2. jquery 1.9里面已经删除了toggle(fn1, fn2)函数

    转自:http://blog.sina.com.cn/s/blog_50042fab0101c7a9.html jquery 1.9里面已经删除了toggle(fn1, fn2)函数: 引用 Note ...

  3. IIS- ASP站点布署时查看ASP错误信息

    ASP使用的脚本是VBSCRIPT,布置的时候想显示他的错误信息,可以在INTERNET选项里把显示友好http错误信息的勾去掉 就能查看ASP布署时查看错误信息的勾去掉.

  4. 几种不同风格的Toast

    一般情况下,我们使用Toast默认的风格就行了,只是有些时候为了达到我们自己想要的效果需要自定义一下,包括自定义显示的位置,显示的内容以及完全自定义里面的布局,代码如下: activity: pack ...

  5. Splunk < 6.3 版本 SSL 证书过期事宜

    最近Splunk发出邮件提醒客户SSL证书过期事宜. 问题看起来比较严重,因为所有的实例,包括 forwarder\peernode\indexer\master node 等等都受影响,而且Depl ...

  6. RichTextBox选中文本时往自己的其他的位置实现拖拽

          private void Form1_Load(object sender, EventArgs e) { richTextBox1.AllowDrop = true; richTextB ...

  7. 深度剖析:CDN内容分发网络技术原理--转载

    1.前言 Internet的高速发展,给人们的工作和生活带来了极大的便利,对Internet的服务品质和访问速度要求越来越高,虽然带宽不断增加,用户数量也在不断增加,受Web服务器的负荷和传输距离等因 ...

  8. JDK7 HashMap源码分析

    本文基于JDK1.7.0_79的版本进行分析. 注释比较详细. 若有不明白的地方可以指出, 我再进行细化. public class HashMap<K,V> extends Abstra ...

  9. Hadoop书籍汇总

    <Hadoop实战>陆嘉恒 <Hadoop - The Definitive Guide>Tom White,中文版<Hadoop权威指南> <Hadoop技 ...

  10. java.io.EOFException错误

    TOmcat启动后报:IOException while loading persisted sessions: Java.io.EOFException错误 - IOException while ...