PyQt + sklearn 图像聚类 +图形界面 小软件
来源:互联网 发布:淘宝流量提升软件 编辑:程序博客网 时间:2024/06/08 10:50
用qt designer设计图形界面
以下是界面部分
# -*- coding: utf-8 -*-# Form implementation generated from reading ui file 'untitled3.ui'## Created by: PyQt5 UI code generator 5.6## WARNING! All changes made in this file will be lost!from PyQt5 import QtCore, QtGui, QtWidgetsclass Ui_Form(object): path_temp="" classnum=2 def setupUi(self, Form): Form.setObjectName("Form") Form.resize(711, 471) self.setWindowIcon(QtGui.QIcon("test.png")) self.graphicsView = QtWidgets.QGraphicsView(Form) self.graphicsView.setGeometry(QtCore.QRect(20, 90, 261, 191)) self.graphicsView.setObjectName("graphicsView") self.graphicsView_2 = QtWidgets.QGraphicsView(Form) self.graphicsView_2.setGeometry(QtCore.QRect(300, 30, 391, 301)) self.graphicsView_2.setObjectName("graphicsView_2") self.pushButton = QtWidgets.QPushButton(Form) self.pushButton.setGeometry(QtCore.QRect(550, 390, 75, 23)) self.pushButton.setObjectName("pushButton") self.pushButton_2 = QtWidgets.QPushButton(Form) self.pushButton_2.setGeometry(QtCore.QRect(70, 380, 161, 31)) self.pushButton_2.setObjectName("pushButton_2") self.label = QtWidgets.QLabel(Form) self.label.setGeometry(QtCore.QRect(380, 390, 71, 20)) self.label.setContextMenuPolicy(QtCore.Qt.NoContextMenu) self.label.setLineWidth(3) self.label.setTextFormat(QtCore.Qt.RichText) self.label.setIndent(-1) self.label.setObjectName("label") self.spinBox = QtWidgets.QSpinBox(Form) self.spinBox.setGeometry(QtCore.QRect(470, 390, 71, 22)) self.spinBox.setCursor(QtGui.QCursor(QtCore.Qt.IBeamCursor)) self.spinBox.setMinimum(1) self.spinBox.setProperty("value", 2) self.spinBox.setObjectName("spinBox") self.label_2 = QtWidgets.QLabel(Form) self.label_2.setGeometry(QtCore.QRect(20, 90, 261, 191)) self.label_2.setObjectName("label_2") self.imagelabel = QtWidgets.QLabel(Form) self.imagelabel.setGeometry(QtCore.QRect(300, 30, 391, 301)) self.imagelabel.setObjectName("imagelabel") self.retranslateUi(Form) self.pushButton_2.clicked.connect(Form.openimage) self.spinBox.valueChanged['int'].connect(Form.getvalue) self.pushButton.clicked.connect(Form.createimage) QtCore.QMetaObject.connectSlotsByName(Form) def retranslateUi(self, Form): _translate = QtCore.QCoreApplication.translate Form.setWindowTitle(_translate("Form", "图像分割")) self.pushButton.setText(_translate("Form", "确认")) self.pushButton_2.setText(_translate("Form", "选择图片来源")) self.label.setText(_translate("Form", "选择分类数")) self.label_2.setText(_translate("Form", "原来的图片位置")) self.imagelabel.setText(_translate("Form", "处理后的图片的位置"))
注意,以下是逻辑部分。其中按钮确定的槽函数绑定的图像处理和显示图像!!
from untitled3 import Ui_Formfrom PyQt5 import QtWidgets, QtGuifrom PyQt5.QtWidgets import QFileDialogimport sysimport numpy as npimport PIL.Image as imagefrom sklearn.cluster import KMeansimport osclass mydesignershow(QtWidgets.QWidget,Ui_Form): def __init__(self): super(mydesignershow, self).__init__() self.setupUi(self) def openimage(self): file_path, imgType = QFileDialog.getOpenFileName(self, "打开图片", r"C:\Users\Administrator\Desktop\Python\sexyimage", " *.jpg;;*.png;;*.jpeg;;*.bmp;;All Files (*)") png = QtGui.QPixmap(file_path).scaled(self.label_2.width(), self.label_2.height()) self.path_temp=file_path self.label_2.setPixmap(png) def getvalue(self): self.classnum = self.spinBox.text() def createimage(self): def load_data(file_path): f = open(file_path, 'rb') # 二进制打开 data = [] img = image.open(f) # 以列表形式返回图片像素值 m, n = img.size # 活的图片大小 for i in range(m): for j in range(n): # 将每个像素点RGB颜色处理到0-1范围内并存放data x, y, z = img.getpixel((i, j)) data.append([x / 256.0, y / 256.0, z / 256.0]) f.close() return np.mat(data), m, n # 以矩阵型式返回data,图片大小 img_data, row, col = load_data(file_path=self.path_temp) num=self.classnum label = KMeans(n_clusters=int(num), init='k-means++', tol=1e-6).fit_predict(img_data) # 聚类中心的个数为num个 label = label.reshape([row, col]) # 聚类获得每个像素所属的类别 pic_new = image.new("L", (row, col)) # 创建一张新的灰度图保存聚类后的结果 for i in range(row): # 根据所属类别向图片中添加灰度值 for j in range(col): pic_new.putpixel((i, j), int(256 / (label[i][j] + 1))) pic_new.save("a.jpg") # 利用qlabel显示图片 png = QtGui.QPixmap("a.jpg").scaled(self.imagelabel.width(), self.imagelabel.height()) self.imagelabel.setPixmap(png) os.remove("a.jpg")if __name__=="__main__": app=QtWidgets.QApplication(sys.argv) myshow=mydesignershow() myshow.show() sys.exit(app.exec())
最后感谢知乎萌新的学习日记,里面有很多有意思的小题目,这里参考了其中的聚类文章!
阅读全文
0 0
- PyQt + sklearn 图像聚类 +图形界面 小软件
- pyqt开发新浪微博粉丝聊天软件v1(图形界面)
- Python的图形界面工具----PyQt
- 『sklearn学习』沃德结构层次聚类的浣熊脸图像的演示
- 基于PyQt开发的第二个小程序:高校BBS发帖辅助软件(CampusBBSAssistant)
- 图形界面---显示图像
- Pyqt 浏览器截图小demo
- PyQt写的简单图像标注工具
- SkLearn 对上证50成分股聚类
- 使用sklearn进行K_Means聚类算法
- Sklearn库中Kmeans聚类技术
- sklearn.cluster.Kmeans 聚类研究
- PyQt
- PyQt
- PyQt
- PYQT
- 基于PYQT编写一个人脸识别软件
- 基于MFC和OpenCV的图像处理小软件
- Vue生命周期
- 动画
- 项目中遇到跨域以及涉及详解
- CAS原理 Java SE1.6中的Synchronized
- [inno setup]学习入门之二 关于写入注册表的一点注意
- PyQt + sklearn 图像聚类 +图形界面 小软件
- 3.前端常见js问答题
- sed使用技巧之--给文件的行编号
- 小米手机如何通过蓝牙共享网络到笔记本电脑
- 413. Arithmetic Slices
- hashmap实现原理浅析
- eclipse编写web.xml中出现The word '...' is not correctly spelled
- [OnlineChat] 基于JSP+Servlet+Bean的在线聊天室
- 单例的五种实现方式,及其性能分析