用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, QtWidgets
class 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_Form
from PyQt5 import QtWidgets, QtGui
from PyQt5.QtWidgets import QFileDialog
import sys
import numpy as np
import PIL.Image as image
from sklearn.cluster import KMeans
import os
class 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())
最后感谢知乎萌新的学习日记,里面有很多有意思的小题目,这里参考了其中的聚类文章!