Python PyQt5干货满满小项目轻松实现高效抠图去背景

目录
  • 简介
  • 1.获取API
  • 2.API使用方法
  • 3.可视化桌面制作
  • 4.逻辑实现
  • 5.美化
  • 6.信号与槽绑定
  • 7.全部代码
  • 8.界面展示

简介

结合学习的PyQt5,弄点小项目,做次记录。
此项目是使用了removebg的API,进行实现抠图功能,将人物的背景扣去。将次功能封装到桌面上。

1.获取API

先打开removebg的网站

点击上面的工具和API

再点击API Docs

最后点击Get API Key,当然要先登录

2.API使用方法

在API Docs 下面有使用方法

3.可视化桌面制作

def ui_init(self):
        self.setWindowTitle('抠图') # 设置窗口标题
        self.resize(610,500) # 设置窗口大小

        self.button = QPushButton('选择图片')

		'''两个放置图片的Qlable'''
        self.before_lable = QLabel()
        self.before_lable.setToolTip('原来的图片') # 设置提示信息
        self.before_lable.resize(300,400)
        self.before_lable.setScaledContents(True) # 设置图片自适应窗口大小
        self.before_lable.setFrameShape(QFrame.Panel|QFrame.Plain)
        self.after_lable = QLabel()
        self.after_lable.setToolTip('处理后的图片') # 设置提示信息
        self.after_lable.resize(300,400)
        self.after_lable.setScaledContents(True) # 设置图片自适应窗口大小
        self.after_lable.setFrameShape(QFrame.Panel|QFrame.Plain)

		'''一条线'''
        self.frame = QFrame()
        self.frame.setFrameShape(QFrame.VLine|QFrame.Plain)

		'''窗口布局'''
        self.h_layout = QHBoxLayout()
        self.v_layout = QVBoxLayout()
        self.h_layout.addWidget(self.before_lable)
        self.h_layout.addWidget(self.frame)
        self.h_layout.addWidget(self.after_lable)
        self.v_layout.addWidget(self.button)
        self.v_layout.addLayout(self.h_layout)
        self.widget = QWidget()
        self.setCentralWidget(self.widget)
        self.widget.setLayout(self.v_layout)

使用setToolTip方法设置提示信息

self.before_lable.setToolTip('原来的图片') # 设置提示信息

使用setScaledContents方法设置在before_lable上的图片自适应

self.before_lable.setScaledContents(True)

使用setFrameShape方法设置QLable的形状,因为QFrame是QLable的基类,所以可以使用QFrame的方法

self.before_lable.setFrameShape(QFrame.Panel|QFrame.Plain)

样式组合表

窗口布局是由:
两个QLable和一个QFrame水平布局
在有Qpushbutton和水平布局的容器进行垂直布局

4.逻辑实现

def file(self):
        fname,a = QFileDialog.getOpenFileName(self,'打开文件','.','图像文件(*.jpg *.png)') # 用来选择文件
        if fname:
            self.before_lable.setPixmap(QPixmap(fname)) # 将原来的图片显示在before_lable控件上

			'''API调用'''
            response = requests.post(
            'https://api.remove.bg/v1.0/removebg',
            files={'image_file': open(fname, 'rb')},
            data={'size': 'auto'},
            headers={'X-Api-Key': '你们自己的API Key'},
            )
            if response.status_code == requests.codes.ok:
                with open('no-bg.png', 'wb') as f:
                    f.write(response.content)
                try:
                    self.after_lable.setPixmap(QPixmap('./no-bg.png'))
                except FileNotFoundError:
                    pass

用QFileDialog.getOpenFileName,选择本地文件。此方法返回两个值,第一个值才是我们需要的。

fname,a = QFileDialog.getOpenFileName(self,'打开文件','.','图像文件(*.jpg *.png)') # 用来选择文件

5.美化

只对按键进行了美化

def qss_init(self):
        qss = '''
        QPushButton{
                border-radius: 6px;
                border: none;
                height: 25px;
                color: white;
                background: rgb(57, 58, 60);
            }

        QPushButton:enabled:hover{
                background: rgb(230, 39, 39);
            }
        QPushButton:enabled:pressed{
                background: rgb(255, 0, 0);
            }
            '''
        self.setStyleSheet(qss) # 加载样式

6.信号与槽绑定

def connect_init(self):
        self.button.clicked.connect(self.file)

7.全部代码

import sys
from PyQt5.QtWidgets import QApplication, QPushButton, QStatusBar, QWidget, QFileDialog, QLabel, QHBoxLayout, QVBoxLayout, QFrame, QMainWindow
from PyQt5.QtGui import QPixmap
import requests
class removebg(QMainWindow):
    def __init__(self):
        super(removebg,self).__init__()
        self.ui_init()
        self.qss_init()
        self.connect_init()

    def ui_init(self):
        self.setWindowTitle('抠图')
        self.resize(610,500)

        self.button = QPushButton('选择图片')
        self.before_lable = QLabel()
        self.before_lable.setToolTip('原来的图片')
        self.before_lable.resize(300,400)
        self.before_lable.setScaledContents(True) # 设置图片自适应窗口大小
        self.before_lable.setFrameShape(QFrame.Panel|QFrame.Plain)
        self.after_lable = QLabel()
        self.after_lable.setToolTip('处理后的图片')
        self.after_lable.resize(300,400)
        self.after_lable.setScaledContents(True) # 设置图片自适应窗口大小
        self.after_lable.setFrameShape(QFrame.Panel|QFrame.Plain)

        self.frame = QFrame()
        self.frame.setFrameShape(QFrame.VLine|QFrame.Plain)
        self.h_layout = QHBoxLayout()
        self.v_layout = QVBoxLayout()
        self.h_layout.addWidget(self.before_lable)
        self.h_layout.addWidget(self.frame)
        self.h_layout.addWidget(self.after_lable)
        self.v_layout.addWidget(self.button)
        self.v_layout.addLayout(self.h_layout)
        self.widget = QWidget()
        self.setCentralWidget(self.widget)
        self.widget.setLayout(self.v_layout)

    def file(self):
        fname,a = QFileDialog.getOpenFileName(self,'打开文件','.','图像文件(*.jpg *.png)')
        if fname:
            self.before_lable.setPixmap(QPixmap(fname))

            response = requests.post(
            'https://api.remove.bg/v1.0/removebg',
            files={'image_file': open(fname, 'rb')},
            data={'size': 'auto'},
            headers={'X-Api-Key': '7Uuo8dhdTHwSXUdjhKZP7h9c'},
            )
            if response.status_code == requests.codes.ok:
                with open('no-bg.png', 'wb') as f:
                    f.write(response.content)
                try:
                    self.after_lable.setPixmap(QPixmap('./no-bg.png'))
                except FileNotFoundError:
                    pass 

    def connect_init(self):
        self.button.clicked.connect(self.file)        

    def qss_init(self):
        qss = '''
        QPushButton{
                border-radius: 6px;
                border: none;
                height: 25px;
                color: white;
                background: rgb(57, 58, 60);
            }

        QPushButton:enabled:hover{
                background: rgb(230, 39, 39);
            }
        QPushButton:enabled:pressed{
                background: rgb(255, 0, 0);
            }
            '''
        self.setStyleSheet(qss)

if __name__ == '__main__':
    app = QApplication(sys.argv)
    dispaly = removebg()
    dispaly.show()
    sys.exit(app.exec_())

8.界面展示

还可以添加程序图标

到此这篇关于Python PyQt5干货满满小项目轻松实现高效抠图去背景的文章就介绍到这了,更多相关Python PyQt5 抠图内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Python PyQt5干货满满小项目轻松实现高效抠图去背景

    目录 简介 1.获取API 2.API使用方法 3.可视化桌面制作 4.逻辑实现 5.美化 6.信号与槽绑定 7.全部代码 8.界面展示 简介 结合学习的PyQt5,弄点小项目,做次记录. 此项目是使用了removebg的API,进行实现抠图功能,将人物的背景扣去.将次功能封装到桌面上. 1.获取API 先打开removebg的网站 点击上面的工具和API 再点击API Docs 最后点击Get API Key,当然要先登录 2.API使用方法 在API Docs 下面有使用方法 3.可视化桌面

  • Python PyQt5实战项目之网速监控器的实现

    目录 简介 psutil模块使用 主界面 网速线程 全部代码 成果展示 简介 看到了一个能够轻松实现获取系统运行的进程和系统利用率(包括CPU.内存.磁盘.网络等)信息的模块–psutil模块.这次利用psutil.net_io_counters()这个方法. psutil模块使用 >>> psutil.net_io_counters() # 获取网络读写字节/包的个数 snetio(bytes_sent=16775953, bytes_recv=712657945, packets_s

  • Python减肥小工具轻松帮你瘦

    ​ 导语 轻松瘦 | 和闺蜜减肥的日常,谁说闺蜜是减肥路上的一座山? 哈喽!大家好!我是木木子吖~ 小编有一个闺蜜,还是同一所学校读书毕业的,这体重在大三的时候就达到了130斤! 每次出去聚餐,我们的都会"嘲笑"她,因为她之前的时候可是没有这么重,不知道为什么后来变成了这样,当时闺蜜还看得开,于是就说,自己的男朋友都没有嫌弃自己,你们就别"嘲笑"自己了. [解释一下:这里不是真的嘲笑哈,只是朋友间开开玩笑!求生欲满满的我.] 于是,我就悄悄的提醒一下闺蜜,用间接的方

  • Python实战小项目之身份证信息校验

    python小项目–身份证信息校验 目的 制作个程序,输入身份证号码,输出如下信息 性别 : 男 地区 : 福建省龙岩市永定县 出生年月日: 2000年05月01日 出生当日派出所登记的第 1 个男孩 校验码: 0 身份证号真伪性: 真 所需文件与知识 身份证区域代码.xls(已上传) 身份证号码组成 身份证校验码算法 校验码算法 18位身份证=17位信息数据+1位校验码 1到6位 7到14位 15到16位 17位 18位 区域代码 出生年月日 登记所代码 性别 校验码 性别:男生为奇数,女生为

  • Python实战小项目之Mnist手写数字识别

    目录 程序流程分析图: 传播过程: 代码展示: 创建环境 准备数据集 下载数据集 下载测试集 绘制图像 搭建神经网络 训练模型 测试模型 保存训练模型 运行结果展示: 程序流程分析图: 传播过程: 代码展示: 创建环境 使用<pip install+包名>来下载torch,torchvision包 准备数据集 设置一次训练所选取的样本数Batch_Sized的值为512,训练此时Epochs的值为8 BATCH_SIZE = 512 EPOCHS = 8 device = torch.devi

  • Python PyQt5实战项目之文件拷贝器的具体实现详解

    目录 简介 UI设置 主要逻辑 信号与槽 成果展示 简介 写了一个简单的文件夹内容下所有文件复制到另一个文件夹内,主要逻辑代码是来自<2小时玩转python多线程编程>中的一个章节. UI设置 def ui_init(self): ''' 界面的函数 ''' self.setWindowTitle('拷贝器') self.resize(600,400) self.setMinimumSize(600,400) # 设置窗口的最小值 '''控件''' self.root_btn = QPushB

  • Python PyQt5实战项目之查询器的实现流程详解

    目录 简介 主界面 添加数据的界面 删除数据的界面 修改数据的界面 全部代码 展示 简介 这是一个操作数据库(sqlite3)的项目,用PyQt5进行界面封装. 此次项目最主要的是,主界面与子界面的交互,一个主界面与三个子界面交互 可以添加数据,修改数据,删除数据 主界面 class MainWidget(QMainWindow): def __init__(self): super(MainWidget,self).__init__() self.ui_init() self.connect_

  • Python实现敲击木鱼积累功德小项目

    前言:前几天上课闲着没事写了一个python敲击木鱼积累功德的小项目,当时纯粹就是写着玩,回顾一下鼠标事件的东西还记不记得,发现这个博客的点赞和收藏量还挺高的,我当时也没有把它当回事,后面也有很多人问怎么实现的,想让我再添加一些其他功能! 随着点赞量和关注量不断增高,我又重新看了一下博客,感觉过于简单了,实在不配当当时python热榜的第一,所以我又把代码给稍微大改了一下,在原来总体实现的基础上添加了如下功能! 我们先看原来的效果: 1:实现了点击鼠标会弹出切换功德+1的surface界面,鼠标

  • Python Flask 搭建微信小程序后台详解

    前言: 近期需要开发一个打分的微信小程序,涉及到与后台服务器的数据交互,因为业务逻辑相对简单,故选择Python的轻量化web框架Flask来搭建后台程序.因为是初次接触小程序,经过一番摸索和尝试,个人觉得的微信小程序与后台的交互有点像ajax,所以有ajax开发经验的同学开发小程序应该很容易上手,因为本文着重讲解后台程序的搭建,所以,微信小程序的前端开发将一笔带过,有兴趣学习小程序前端语言的同学可移步网易云课堂的一套快速入门课程<轻松玩转微信小程序>. 分三步讲解微信小程序与Python后台

  • Python+PyQt5+MySQL实现天气管理系统

    在本篇博客中,我利用Python语言其编写界面库PyQt5,然后通过连接MySQL数据库,实现了一个简单的天气管理小系统,该系统包含简单的增删查改四个主要功能.本文旨在解析实现的程序,能够让读者快速了解PyQt5图形界面库,然后可以初步实现这样一个小的系统程序. PyQt5简介 PyQt5本身来自C++的界面库Qt,经过一系列的封装移植到Python里面,作为Python的一个图像界面库,它继承了Python语言简单易实现的特点,可以实现基本的界面效果.里面有许多类实现了我们想要的窗体.表格.文

随机推荐