Python+Qt相片更换背景颜色窗体程序的步骤详解
作者:alicema1111
QT+Python是非常经典的窗体编程组合,功能完善,可视化界面美观易维护,这篇博客针对相片更换背景颜色方面编写代码,代码整洁,规则,易读,对学习与使用Python有较好的帮助,需要的朋友可以参考下
程序示例精选
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.运行结果如下:
三、在线协助:
如需安装运行环境或远程调试,可以邀请专业人士!
到此这篇关于Python+Qt相片更换背景颜色窗体程序的文章就介绍到这了,更多相关Python+Qt更换背景颜色内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!