做网站学h5还是php网站建设公司是怎么找客户
news/
2025/10/5 4:33:22/
文章来源:
做网站学h5还是php,网站建设公司是怎么找客户,直播间网站建设,wordpress的插件目录下前面一直都是使用命令行运行代码#xff0c;不够人性化。这篇用Python编写一个GUI界面#xff0c;使用PyQt5编写图像处理程序。包括#xff1a;打开、关闭摄像头#xff0c;捕获图片#xff0c;读取本地图片#xff0c;灰度化和Otsu自动阈值分割的功能。 使用Qt Designer…前面一直都是使用命令行运行代码不够人性化。这篇用Python编写一个GUI界面使用PyQt5编写图像处理程序。包括打开、关闭摄像头捕获图片读取本地图片灰度化和Otsu自动阈值分割的功能。 使用Qt Designer来设计界面。而anaconda里自带了designer.exe我使用的就是这个。designer.exe的路径D:\ProgramData\Anaconda3\Library\bin\如果是普通的Python环境则需要自行安装 pip install pyqt5-tools 安装完成后designer.exe应该在Python的安装目录下xxx\Lib\site-packages\pyqt5_tools\ 生成一个简单的界面后面还会用到 import sys
from PyQt5.QtWidgets import QApplication, QWidgetif __name__ __main__:app QApplication(sys.argv)window QWidget()window.setWindowTitle(Hello World!)window.show()sys.exit(app.exec_()) 一、界面设计 在D:\ProgramData\Anaconda3\Library\bin\下打开designer.exe会弹出创建新窗体的窗口我们直接点击创建英文版是create 界面左侧是Qt的常用控件Widget Box右侧有一个控件属性窗口Property Editor。本例中我们只用到了Push Button控件和Label控件可以在属性窗口调整它的大小150x150可以根据自己的需求适当调大或者缩小 控件上显示的文字text属性和控件的名字objectName属性需要修改便于显示和代码调用可以按照下面的表格命名 控件显示内容text控件名objectNamePushButton打开摄像头btnOpenCameraPushButton捕获图片btnCapturePushButton打开图片btnReadImagePushButton灰度化btnGrayPushButton阈值分割btnThresholdLabel摄像头labelCameraLabel捕获图labelCaptureLabel结果图labelResult前面设计好了界面接下来就是实现打开摄像头到阈值分割这五个按钮的功能也就是给每个按钮指定一个函数逻辑代码写在这个函数里面。这个函数就称事件Qt中称为槽连接 点击Designer工具栏的Edit Signals/Slots按钮进入槽函数编辑界面点击旁边的Edit Widgets可以恢复正常视图 在弹出的配置窗口中可以看到左侧是按钮的常用事件我们选择点击事件”clicked()”然后添加一个名为”btnOpenCamera_Clicked()”的槽函数 重复上面的步骤给五个按钮添加五个槽函数最终结果如下 Ctrl S保存.ui文件。我们需要将ui转py代码。 打开cmd命令行切换到ui文件的保存目录。Windows下有个小技巧可以在目录的地址栏输入cmd一步切换到当前目录 执行这条指令 pyuic5 -o mainForm.py using_pyqt_create_ui.ui 生成mainForm.py文件里面包含一个名为”Ui_MainWindow”的类。 二、编写逻辑代码 mainForm.py是根据ui文件生成的也就是说一旦ui文件有所改变需要重新生成覆盖原来的文件。 新建一个mainEntry.py存放逻辑代码代码虽然很长但是很简单并不难懂。有些部分有所重复并没有将其封装成一个函数博主能力有限感兴趣的可以试一下 import sys
import cv2
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import QFileDialog, QMainWindow
from mainForm import Ui_MainWindowclass PyQtMainEntry(QMainWindow, Ui_MainWindow):def __init__(self):super().__init__()self.setupUi(self)self.camera cv2.VideoCapture(0)self.is_camera_opened False # 摄像头有没有打开标记# 定时器30ms捕获一帧self._timer QtCore.QTimer(self)self._timer.timeout.connect(self._queryFrame)self._timer.setInterval(30)def btnOpenCamera_Clicked(self):打开和关闭摄像头self.is_camera_opened ~self.is_camera_openedif self.is_camera_opened:self.btnOpenCamera.setText(关闭摄像头)self._timer.start()else:self.btnOpenCamera.setText(打开摄像头)self._timer.stop()def btnCapture_Clicked(self):捕获图片# 摄像头未打开不执行任何操作if not self.is_camera_opened:returnself.captured self.frame# 后面这几行代码几乎都一样可以尝试封装成一个函数rows, cols, channels self.captured.shapebytesPerLine channels * cols# Qt显示图片时需要先转换成QImgage类型QImg QImage(self.captured.data, cols, rows, bytesPerLine, QImage.Format_RGB888)self.labelCapture.setPixmap(QPixmap.fromImage(QImg).scaled(self.labelCapture.size(), Qt.KeepAspectRatio, Qt.SmoothTransformation))def btnReadImage_Clicked(self):从本地读取图片 文件路径不能有中文# 打开文件选取对话框filename, _ QFileDialog.getOpenFileName(self, 打开图片)if filename:self.captured cv2.imread(str(filename))# OpenCV图像以BGR通道存储显示时需要从BGR转到RGBself.captured cv2.cvtColor(self.captured, cv2.COLOR_BGR2RGB)rows, cols, channels self.captured.shapebytesPerLine channels * colsQImg QImage(self.captured.data, cols, rows, bytesPerLine, QImage.Format_RGB888)self.labelCapture.setPixmap(QPixmap.fromImage(QImg).scaled(self.labelCapture.size(), Qt.KeepAspectRatio, Qt.SmoothTransformation))def btnGray_Clicked(self):灰度化# 如果没有捕获图片则不执行操作if not hasattr(self, captured):returnself.cpatured cv2.cvtColor(self.captured, cv2.COLOR_RGB2GRAY)rows, columns self.cpatured.shapebytesPerLine columns# 灰度图是单通道所以需要用Format_Indexed8QImg QImage(self.cpatured.data, columns, rows, bytesPerLine, QImage.Format_Indexed8)self.labelResult.setPixmap(QPixmap.fromImage(QImg).scaled(self.labelResult.size(), Qt.KeepAspectRatio, Qt.SmoothTransformation))def btnThreshold_Clicked(self):Otsu自动阈值分割if not hasattr(self, captured):return_, self.cpatured cv2.threshold(self.cpatured, 0, 255, cv2.THRESH_BINARY cv2.THRESH_OTSU)rows, columns self.cpatured.shapebytesPerLine columns# 阈值分割图也是单通道也需要用Format_Indexed8QImg QImage(self.cpatured.data, columns, rows, bytesPerLine, QImage.Format_Indexed8)self.labelResult.setPixmap(QPixmap.fromImage(QImg).scaled(self.labelResult.size(), Qt.KeepAspectRatio, Qt.SmoothTransformation))QtCore.pyqtSlot()def _queryFrame(self):循环捕获图片ret, self.frame self.camera.read()img_rows, img_cols, channels self.frame.shapebytesPerLine channels * img_colscv2.cvtColor(self.frame, cv2.COLOR_BGR2RGB, self.frame)QImg QImage(self.frame.data, img_cols, img_rows, bytesPerLine, QImage.Format_RGB888)self.labelCamera.setPixmap(QPixmap.fromImage(QImg).scaled(self.labelCamera.size(), Qt.KeepAspectRatio, Qt.SmoothTransformation))if __name__ __main__:app QtWidgets.QApplication(sys.argv)window PyQtMainEntry()window.show()sys.exit(app.exec_()) 参考网址https://tianchi.aliyun.com/course/courseConsole?courseId40992chapterIndex1sectionIndex16转载于:https://www.cnblogs.com/gezhuangzhuang/p/10289980.html
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/927860.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!