一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - Python PyQt5干貨滿滿小項目輕松實現高效摳圖去背景

Python PyQt5干貨滿滿小項目輕松實現高效摳圖去背景

2022-02-26 00:16不俠居 Python

PyQt5以一套Python模塊的形式來實現功能。它包含了超過620個類,600個方法和函數。本篇文章手把手帶你用PyQt5輕松實現圖片扣除背景,大家可以在過程中查缺補漏,提升水平

簡介

結合學習的PyQt5,弄點小項目,做次記錄。

此項目是使用了removebg的API,進行實現摳圖功能,將人物的背景扣去。將次功能封裝到桌面上。

1.獲取API

先打開removebg的網站

Python PyQt5干貨滿滿小項目輕松實現高效摳圖去背景

點擊上面的工具和API

Python PyQt5干貨滿滿小項目輕松實現高效摳圖去背景

再點擊API Docs

Python PyQt5干貨滿滿小項目輕松實現高效摳圖去背景

最后點擊Get API Key,當然要先登錄

Python PyQt5干貨滿滿小項目輕松實現高效摳圖去背景

Python PyQt5干貨滿滿小項目輕松實現高效摳圖去背景

 

2.API使用方法

在API Docs 下面有使用方法

Python PyQt5干貨滿滿小項目輕松實現高效摳圖去背景

 

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)

樣式組合表

Python PyQt5干貨滿滿小項目輕松實現高效摳圖去背景

窗口布局是由:
兩個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干貨滿滿小項目輕松實現高效摳圖去背景的文章就介紹到這了,更多相關Python PyQt5 摳圖內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://blog.csdn.net/m0_46778548/article/details/113933661

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 精品日韩欧美一区二区三区在线播放 | 亚洲第99页 | 办公室大战秘书呻吟 | 久久精品熟女亚洲AV国产 | 国产一级在线观看 | 女人被男人躁得好爽免费视频 | 天天色视频 | 色哟哟在线观看 | 日韩成人在线免费视频 | 99国产自偷色久 | 国产福利你懂的 | 日韩在线天堂免费观看 | 精品四虎 | 国产精品夜色视频一级区 | 欧美一区a| 72张让男人一看就硬的图片 | 成年人在线观看视频 | 久久国产精品永久免费网站 | 视频一区二区在线 | 被强迫调教的高辣小说 | 久久久免费热线精品频 | 特级毛片免费视频观看 | 美女福利视频午夜在线 | 亚洲高清在线视频 | 四虎影业 | 爱情岛论坛自拍永久入口 | α级毛片 | 深夜福利免费在线观看 | 幸福草电视剧演员表介绍 | 色综合91久久精品中文字幕 | 美女全身体光羞羞漫画 | 人与动人物人a级特片 | 久久综合中文字幕佐佐木希 | 欧美精品一区二区在线观看播放 | 午夜成私人影院在线观看 | 深夜在线看 | 成年视频在线观看 | 欧美整片完整片视频在线 | 被巨大黑人的翻白眼 | 好女孩韩剧免费观看 | 午夜伦理电影在线观免费 |