技术标签: python qt exe PyQt5 pyqt5 opencv
在这里我们基于Python-Windows+Pycharm+PyQt5基础环境配置,1000%解决你的环境问题(一)的学习,我们搭建好PyQt5的基础环境,这里我们将进行制作一个简单的软件-----视频播放器;
基础环境:
在这里介绍几个重要的函数(方法)
1. getOpenFileName
videoName, _ = QFileDialog.getOpenFileName(self, "Open", "", "*.avi;;*.mp4;;All Files(*)")
QFileDialog.getOpenFileName (
QWidget * parent = 0, #用于指定父组件 const QString & caption = QString(),#对话框的标题; const QString & dir = QString(),#是对话框显示时默认打开的目录,"." 代表程序运行目录,"/" 代表当前盘符的根目录(Windows,Linux下/就是根目录了), 也可以是平台相关的,比如"C:\\"等;例如我想打开程序运行目录下的Data文件夹作为默认打开路径,这里应该写成"./Data/", 若想有一个默认选中的文件,则在目录后添加文件名即可:"./Data/teaser.graph" const QString & filter = QString(),#是对话框的后缀名过滤器,比如我们使用"Image Files(*.jpg *.png)"就让它只能显示后缀名是jpg或者png的文件。 如果需要使用多个过滤器,使用";;"分割,比如"JPEG Files(*.jpg);;PNG Files(*.png)" QString * selectedFilter = 0,#是默认选择的过滤器 Options options = 0 #是对话框的一些参数设定,比如只显示文件夹等等,它的取值是enum QFileDialog::Option, 每个选项可以使用 | 运算组合起来。 )
第一个返回值imgName记录选中的文件路径+文件名;
第二个返回值imgType记录文件的类型;
2. QImage
from PyQt5.QtGui import *
q_image = QImage(frame.data,#img
width, #获取原始图片的宽
height,#获取原始图片的高
bytesPerLine,#通道
QImage.Format_RGB888).scaled(self.label.width().self.label.height())#转化为RGB,并把在label上展示的图片修改大小(使用scaled()方法)
在这里简单介绍一下Qpixmap类的常用方法
3. setPixmap / setText
setPixmap 是给label”赋值“(展示图片)
setText方法就是给文本框赋值
上才艺:
import sys
from PyQt5 import QtWidgets, QtCore, QtGui
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
import cv2
from PyQt5.QtCore import QTimer
class Video(QWidget):
def __init__(self):
super(Video, self).__init__()
self.frame = [] # 存图片
self.detectFlag = False # 检测flag
self.cap = []
self.timer_camera = QTimer() # 定义定时器
# 外框
self.resize(900, 650)
self.setWindowTitle("Head Detection")
# 图片label
self.label = QLabel(self)
self.label.setText("Waiting for video...")
self.label.setFixedSize(800, 450) # width height
self.label.move(50, 100)
self.label.setStyleSheet("QLabel{background:pink;}"
"QLabel{color:rgb(100,100,100);font-size:15px;font-weight:bold;font-family:宋体;}"
)
# 显示人数label
self.label_num = QLabel(self)
self.label_num.setText("Waiting for detectiong...")
self.label_num.setFixedSize(430, 40) # width height
self.label_num.move(200, 20)
#self.label_num.setStyleSheet("QLabel{background:yellow;}")
# 开启视频按键
self.btn = QPushButton(self)
self.btn.setText("Open")
self.btn.move(150, 570)
self.btn.clicked.connect(self.slotStart)
# 检测按键
# self.btn_detect = QPushButton(self)
# self.btn_detect.setText("Detect")
# self.btn_detect.move(400, 570)
# self.btn_detect.setStyleSheet("QPushButton{background:red;}") # 没检测红色,检测绿色
# self.btn_detect.clicked.connect(self.detection)
# 关闭视频按钮
self.btn_stop = QPushButton(self)
self.btn_stop.setText("Stop")
self.btn_stop.move(700, 570)
self.btn_stop.clicked.connect(self.slotStop)
def slotStart(self):
""" Slot function to start the progamme
"""
videoName, _ = QFileDialog.getOpenFileName(self, "Open", "", "*.avi;;*.mp4;;All Files(*)")
if videoName != "": # “”为用户取消
self.cap = cv2.VideoCapture(videoName)
self.timer_camera.start(100)
self.timer_camera.timeout.connect(self.openFrame)
def slotStop(self):
""" Slot function to stop the programme
"""
if self.cap != []:
self.cap.release()
self.timer_camera.stop() # 停止计时器
self.label.setText("This video has been stopped.")
self.label.setStyleSheet("QLabel{background:pink;}"
"QLabel{color:rgb(100,100,100);font-size:15px;font-weight:bold;font-family:宋体;}"
)
else:
self.label_num.setText("Push the left upper corner button to Quit.")
Warming = QMessageBox.warning(self, "Warming", "Push the left upper corner button to Quit.",
QMessageBox.Yes)
def openFrame(self):
""" Slot function to capture frame and process it
"""
if (self.cap.isOpened()):
ret, self.frame = self.cap.read()
if ret:
frame = cv2.cvtColor(self.frame, cv2.COLOR_BGR2RGB)
if self.detectFlag == True:
# 检测代码self.frame
self.label_num.setText("There are " + str(5) + " people.")
height, width, bytesPerComponent = frame.shape
bytesPerLine = bytesPerComponent * width
q_image = QImage(frame.data, width, height, bytesPerLine,
QImage.Format_RGB888).scaled(self.label.width(), self.label.height())
self.label.setPixmap(QPixmap.fromImage(q_image))
else:
self.cap.release()
self.timer_camera.stop() # 停止计时器
def detection(self):
self.detectFlag = not self.detectFlag # 取反
if self.detectFlag == True:
self.btn_detect.setStyleSheet("QPushButton{background:green;}")
else:
self.btn_detect.setStyleSheet("QPushButton{background:red;}")
# self.label_num.setText("There are 5 people.")
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
my = Video()
my.show()
sys.exit(app.exec_())
希望这篇博文对你有用!
谢谢点赞评论!
【转】Android中自动连接到指定SSID的Wi-Fi原文地址:http://www.cnblogs.com/pied/p/3767336.html最近在做一个项目,其中涉及到一块“自动连接已存在的wifi热点”的功能,在网上查阅了大量资料,五花八门,但其中一些说的很简单,即不能实现傻瓜式的拿来就用,有些说的很详细,但其中不乏些许错误造成功能无法实现,经过浣熊多方努力,终于成功将功能实现,遂将一点点小成就拿出来与大家分享。在这篇文章中,作者定义了一个wifi工具类,其中存在着操作wif..._harmonyos 2.0 wifi 编程自动连接到指定ssid
//mongodb设置用户名密码,在mongodb/bin目录下use admin db.addUser('user12345','foobar'); app.use(session({ store: new MongoStore({ // Basic usage host: 'localhost', // Default, optional,可不写
重點知識匯總1-1 深拷贝和浅拷贝的区分浅拷贝和深拷贝:只针对object 和Array 这样的复杂的对象。浅拷贝(只拷贝一层)var arr1 = [1,2,3],arr2 = ['a','b']; arr1 =arr2; console.log(arr1);//(2)["a", "b"]可以看到arr1改变了,这叫浅拷贝1-2 浅拷贝的方法对象浅拷贝...
最近在学习算法,经常遇到一行有多个数据,用空格或者','进行分割。最开始不懂,直接百度,n = input()n = int(n)list1 = []list1 = input().split()list2 = []i = 0while i < n: m = int(list1[i]) list2.append(m) i += 1print(lis...
pyQT5中ComboBox的用法常用的方法1、添加下拉选项#添加一个下拉选项self.comboBox.addItem("默认文本")#从列表中添加下拉选项self.comboBox.addItems(["文本1", "文本2", "文本3"])2、设置显示项目self.comboBox.setCurrentIndex(2)3、获取选项中的索引self.comboBox.currentIndex()4、获取选中项的文本self.comboBox.currentText()_pyqt combobox
对于所有算法,我们都要讨论其运行时间。一般而言,应该选择效率最高的算法,以最大程度地减少运行时间或占用空间。大O表示法是一种特殊的表示法,指出了算法的速度有多快。大O表示法 并不能表示具体算法任务运行的时间,这也没有意义,因为任务量总是在变。我们需要知道运行时间如何随任务量增长而增长,这正是大O法的用武之地。大O法表示指出了算法有多快。例如,假设列表包含n个元素。简单查找需要检查每个元素,因此需要执行n次操作。使用大O表示法,这个运行时间表示为O(n)。并没有时间单位s,这是因为大O法指的并非以秒为单.
第一种,直接写r 后面路径是单 反斜杠即可r'E:\Program\Python\yukino.jpg'第二种,直接写路径,需要是双 反斜杠'E:\\Program\\Python\\yukino.jpg'第三种,直接写路径,需要是斜杠 不然是转义符'E:/Program/Python/yukino.jpg'..._python绝对路径怎么写
// 打开文件,获得文件流 std::ifstream inFile(fileName.c_str(), std::ios::in | std::ios::binary); std::ostringstream oss; oss << inFile.rdbuf(); std::string buffer = oss.str(); inFile.close();
Qmsql not loaded :平台 qt5.7 Ubuntu16.04no@no-70MYA004CN:~$ cd /home/no/Qt5.7.0/5.7/gcc_64/plugins/sqldriversno@no-70MYA004CN:~/Qt5.7.0/5.7/gcc_64/plugins/sqldrivers$ldd libqsqlmysql.so(上面指令查看所有依赖关系)./...
文章来源: Delphi MDI 子窗体的创建和销毁1.如果要创建一个mdi child,先看是否有这个child 存在,如果有,则用它,如果没有再创建//该函数判断MDI 子窗体是否存在,再进行创建和显示function isInclude(formclass: TFormClass): boolean;var i: Integer; form: TObjec_delphi 子窗体
原文地址:http://www.52rd.com/bbs/Dispbbs.asp?BoardID=86&ID=69390一、ISO12233 Camera Resolution ChartISO12233分辨率测试标板遵照ISO12233的标准“摄影-电子照相画面-衡量方法"。这个测试标板在1 X 大小的这个活动区域,测量20 cm 高度只有约0.1毫米的误差。他具有几乎大部分解析_usb摄像头灰阶标准一般是多少阶
一、程序设计语言1.分类汇编语言:第一代,第二代计算机用高级语言:比汇编语言编码语言少3-7倍,第三代计算机使用.高级语言又可细分为四种:①系统实现语言:克服汇编语言的缺点,提供控制语句和变量类型检验功能,可直接使用机器的操作②静态高级语言:给程序员提供控制语句③块结构高级语言:直接提供有限形式的动态存储分配④动态高级语言:动态的完成所有的内存管理,专用语言2.语言的选择(1).应用领域的不同来选择:商业-COBOL、4GLS 科学计算-FOETR..._软件工程 编码 程序编码