Python+Qt相片更换背景颜色窗体程序的步骤详解
alicema1111 人气:0程序示例精选
Python+Qt相片更换背景颜色窗体程序
如需安装运行环境或远程调试,由专业技术人员远程协助!
前言
QT+Python是非常经典的窗体编程组合,功能完善,可视化界面美观易维护,这篇博客针对相片更换背景颜色方面编写代码,代码整洁,规则,易读,对学习与使用Python有较好的帮助。
一、所需工具软件
1. Python3.6以上
2. Pycharm代码编辑器
3. PyQT, OpenCV库
二、使用步骤
1.引入库
代码如下(示例):
# -*- coding: utf-8 -*- from PyQt5.QtCore import * from PyQt5.QtGui import * from PyQt5 import QtWidgets from PyQt5.QtWidgets import * import cv2 as cv import numpy as np import os
2.导入相片
代码如下(示例):
def on_loadImage_clicked(self): """ Slot documentation goes here. """ # TODO: not implemented yet self.file_name, self.file_type = QFileDialog.getOpenFileName(self,"打开文件","D:/","All Files (*);") if (img.shape[2] == 3):#bgr到rgb转换的显示 qimg = cv.cvtColor(img, cv.COLOR_BGR2RGB) qimg = QImage(qimg.data, qimg.shape[1], qimg.shape[0], qimg.shape[1]*qimg.shape[2],QImage.Format_RGB888) self.before.setPixmap(QPixmap.fromImage(qimg)) else: qimg = QImage(img.data, img.shape[1], img.shape[0],QImage.Format_Grayscale8) self.before.setPixmap(QPixmap.fromImage(qimg))
该处使用的url网络请求的数据。
3.颜色选择:
代码如下(示例):
def on_colorchoose_currentIndexChanged(self, p0): current = self.colorchoose.currentText() if self.target: if current=="红色": self.color =[0, 0, 255] self.newname= '_red' elif current=="白色": self.color =[255, 255, 255] self.newname= '_white' elif current=="蓝色": self.color =[255, 0, 0] self.newname= '_blue' elif current=="绿色": self.color =[0, 255, 0] self.newname= '_green' elif current=="黄色": self.color=[0, 255, 255] self.newname= '_yellow' elif current=="紫色": self.color=[255, 0, 255] self.newname= '_violet' elif current=="灰色": self.color=[96, 96, 96] self.newname= '_gray' @pyqtSlot() def on_change_clicked(self): """ Slot documentation goes here. """ # TODO: not implemented yet if self.red.text()!="": self.newname='_define' print(self.color) self.target = False img =cv.imread(self.file_name, -1) if (img is None): print(1) self.textBrowser.setText("打开图片失败,请重新加载") else: # 准备数据 wide = img.shape[1] height = img.shape[0] dims = img.shape[2] sampleCount = wide * height clusterCount = 4 points = np.zeros([sampleCount, dims], np.float32) centers = np.zeros([clusterCount, 1], np.float32) index = 0 for i in range(height): for j in range(wide): index = i * wide + j for n in range(dims): points[index][n] = img[i][j][n] criteria = (cv.TERM_CRITERIA_EPS + cv.TERM_CRITERIA_MAX_ITER, 10, 0.1) ret, label, center = cv.kmeans(points, clusterCount, None, criteria, 10, cv.KMEANS_PP_CENTERS) mask = np.zeros((img.shape[0], img.shape[1]), np.uint8) index = wide * 2 + 4 img2 = img.copy() cindex = label[index] for i in range(height): for j in range(wide): index = i * wide + j label1 = label[index] if cindex == label1: for n in range(dims): img2[i][j][n] = 0; mask[i][j] = 0; else: mask[i][j] = 255 structuting = cv.getStructuringElement(cv.MORPH_RECT, (13, 13)) mask =cv.dilate(mask,structuting) mask = cv.erode(mask, structuting) structuting2 = cv.getStructuringElement(cv.MORPH_RECT, (9, 9)) mask = cv.erode(mask, structuting2) cv.waitKey(10) img2 = cv.GaussianBlur(img2, (3, 3), 0, 0) if (img2.shape[2] == 3): qimg = cv.cvtColor(img2, cv.COLOR_BGR2RGB) qimg = QImage(qimg.data, qimg.shape[1], qimg.shape[0], qimg.shape[1] * qimg.shape[2], QImage.Format_RGB888) self.after.setPixmap(QPixmap.fromImage(qimg)) else: qimg = QImage(img.data, img.shape[1], img.shape[0], QImage.Format_Grayscale8) self.after.setPixmap(QPixmap.fromImage(qimg)) name=fathername+"/"+name+self.newname+type print(name) cv.imwrite(name,img2) write = "the image has been saved in:"+name self.textBrowser.setText(write)
4.运行结果如下:
三、在线协助:
如需安装运行环境或远程调试,可以邀请专业人士!
加载全部内容