高級背景摳圖工具(python)

這是一個專業的圖像背景處理工具,基于Python開發,主要功能包括:1. 智能背景去除 - 使用rembg庫的深度學習模型自動識別并移除圖片背景。 2. 背景自定義 - 支持純色背景替換,保留透明通道(Alpha通道)。3. 高級參數調節 - 提供5種專業級圖像處理參數。4. 實時預覽 - 雙窗口對比顯示原圖與處理效果5.多格式保存 - 支持保存為PNG/JPEG格式。

首先,定義了一個create_widgets方法,這個方法負責構建用戶界面,包括控制面板、滑塊、按鈕、圖像顯示區域和狀態欄。

  • 主框架創建:使用ttk.Frame創建主框架main_frame,并填充整個窗口。這通常是GUI布局的起點,用于容納其他組件。
  • 左側控制面板:在main_frame左側創建一個控制面板control_frame,寬度為300像素,垂直填充。這里會放置參數調節滑塊、顏色選擇按鈕和操作按鈕。
  • 參數調節滑塊:調用create_slider方法創建多個滑塊,分別控制去背景強度、邊緣柔化、背景模糊、對比度和亮度。每個滑塊有不同的范圍和步長,例如對比度和亮度使用0.1的步長。
  • 顏色選擇組件:包括一個按鈕和一個畫布,用于選擇背景顏色。按鈕觸發choose_color方法,畫布顯示當前選中的顏色。
  • 操作按鈕:三個按鈕分別用于上傳圖片、保存結果和應用參數。點擊這些按鈕會調用相應的方法,如load_image、save_image和apply_parameters。
  • 圖片顯示區域:在main_frame右側創建圖像顯示區域img_frame,包含原圖預覽和效果預覽兩個畫布。使用tk.Canvas顯示圖像,并添加標簽說明。
  • 狀態欄:底部狀態欄顯示程序狀態信息,使用StringVar動態更新文本。
def create_widgets(self):"""創建界面組件"""main_frame = ttk.Frame(self.root)main_frame.pack(fill=tk.BOTH, expand=True)# 左側控制面板control_frame = ttk.Frame(main_frame, width=300)control_frame.pack(side=tk.LEFT, fill=tk.Y, padx=10, pady=10)# 參數調節滑塊self.create_slider(control_frame, '去背景強度', 'bg_strength', 1, 20)self.create_slider(control_frame, '邊緣柔化', 'edge_smooth', 0, 10)self.create_slider(control_frame, '背景模糊', 'bg_blur', 0, 20)self.create_slider(control_frame, '對比度', 'contrast', 0.5, 2.0, 0.1)self.create_slider(control_frame, '亮度', 'brightness', 0.5, 2.0, 0.1)# 顏色選擇self.color_btn = ttk.Button(control_frame, text="選擇背景色", command=self.choose_color)self.color_btn.pack(pady=10)self.color_preview = tk.Canvas(control_frame, width=100, height=30, bg='#FFFFFF', bd=1, relief='sunken')self.color_preview.pack(pady=5)# 操作按鈕ttk.Button(control_frame, text="上傳圖片", command=self.load_image).pack(pady=10)ttk.Button(control_frame, text="保存結果", command=self.save_image).pack(pady=10)ttk.Button(control_frame, text="應用參數", command=self.apply_parameters).pack(pady=10)# 圖片顯示區域self.img_frame = ttk.Frame(main_frame)self.img_frame.pack(side=tk.RIGHT, fill=tk.BOTH, expand=True, padx=10, pady=10)# 原圖預覽self.original_canvas = tk.Canvas(self.img_frame, bg='#f0f0f0', bd=2, relief='groove')self.original_canvas.pack(side=tk.LEFT, fill=tk.BOTH, expand=True)ttk.Label(self.img_frame, text="原圖").pack(side=tk.LEFT, anchor='n')# 結果預覽self.result_canvas = tk.Canvas(self.img_frame, bg='#f0f0f0', bd=2, relief='groove')self.result_canvas.pack(side=tk.RIGHT, fill=tk.BOTH, expand=True)ttk.Label(self.img_frame, text="效果預覽").pack(side=tk.RIGHT, anchor='n')# 狀態欄self.status_var = tk.StringVar()status_bar = ttk.Label(self.root, textvariable=self.status_var, relief='sunken', style='Status.TLabel')status_bar.pack(fill=tk.X, side=tk.BOTTOM)

接下來,創建動態滑塊創建器:

  • parent: 父容器組件
  • label: 參數顯示名稱(如"去背景強度")
  • param: 參數鍵名(對應self.params字典的key)
  • min_val/max_val: 取值范圍
  • step: 步長(默認1)

使用fill=tk.X實現水平自適應布局,pady=5設置垂直間距保持界面整潔:

frame.pack(fill=tk.X, pady=5)

自動識別浮點型參數(如對比度0.5-2.0),保持整數型參數(如模糊半徑0-20)的精度:

round(value, 1) if isinstance(value, float) else int(value)

實時響應滑塊拖動事件,使用lambda閉包傳遞當前參數名和值,立即更新參數存儲字典:

command=lambda v, p=param: self.update_param(p, float(v))

代碼如下:

def create_slider(self, parent, label, param, min_val, max_val, step=1):"""創建參數調節滑塊"""frame = ttk.Frame(parent)frame.pack(fill=tk.X, pady=5)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/72915.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/72915.shtml
英文地址,請注明出處:http://en.pswp.cn/web/72915.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

如何設計外貿郵件開發信主題

開發信是打開客戶大門的第一步,而郵件主題則是決定客戶是否打開郵件的關鍵。一個吸引人的主題不僅能提高打開率,還能為后續溝通打下良好基礎。 一、突出價值和利益 郵件主題要直接傳達收件人能從中獲得的價值和利益,引起他們的興趣和關注。…

wordpress表單插件CF7調用方式

Contact Form 7(CF7)是WordPress中非常流行的表單插件,以下是其常見的調用方式: 通過短代碼調用 在頁面或文章編輯器中添加:完成表單設置后,復制表單對應的短代碼,然后在需要顯示表單的頁面或文章的編輯器中直接粘貼…

快速入手-基于Django的主子表間操作mysql(五)

1、如果該表中存在外鍵,結合實際業務情況,那可以這么寫: 2、針對特殊的字典類型,可以這么定義 3、獲取元組中的字典值和子表中的value值方法 4、對應的前端頁面寫法

網絡運維學習筆記(DeepSeek優化版) 021 HCIA-Datacom新增知識點03園區網典型組網架構及案例實戰

文章目錄 園區網典型組網架構及案例實戰1 園區網定義2 園區網絡典型架構3 各層級協議與技術4 項目生命周期管理5 小型園區網絡設計框架5.1 組網方案設計5.2 IP地址規劃5.3 園區內部的路由設計5.4 NAT設計5.5 WLAN設計5.6 安全設計5.7 運維管理設計 6 小型園區的實施方案與運維手…

1.8 函數的連續性和間斷點

1.連續的定義 2.間斷點的定義 3.間斷點的分類

基于Arm GNU Toolchain編譯生成的.elf轉hex/bin文件格式方法

基于Arm GNU Toolchain編譯生成的.elf轉hex/bin文件格式方法 已經棄用的版本(Version 10.3-2021.10):gcc-arm-none-eabi:https://developer.arm.com/downloads/-/gnu-rmArm GNU Toolchain當前版本:https://developer.a…

希爾排序中的Hibbard序列

一 定義 Hibbard序列的每個元素由以下公式生成: h_k = 2^k - 1 其中k從1開始遞增,序列為:1, 3, 7, 15, 31, 63, … 二 生成方式 起始條件:k=1,對應h_1=2^1-1=1 遞推公式:每次k增加1,計算 h_{k+1}=2^{k+1}-1 示例:前5項…

失敗的面試經歷(??∧??)

一.面向對象的三大特性 1.封裝:將對象內部的屬性私有化,外部對象不能夠直接訪問,但是可以提供一些可以使外部對象操作內部屬性的方法。 2.繼承:類與類之間會有一些相似之處,但也會有一些異處,使得他們與眾…

算法及數據結構系列 - 二分查找

系列文章目錄 算法及數據結構系列 - BFS算法 文章目錄 二分查找框架思路經典題型二分查找尋找左側邊界尋找右側邊界 刷題875. 愛吃香蕉的珂珂1011. 在 D 天內送達包裹的能力392. 判斷子序列 二分查找 框架思路 int binarySearch(int[] nums, int target) {int left 0, righ…

SpringBoot的啟動原理?

大家好,我是鋒哥。今天分享關于【SpringBoot的啟動原理?】面試題。希望對大家有幫助; SpringBoot的啟動原理? 1000道 互聯網大廠Java工程師 精選面試題-Java資源分享網 Spring Boot的啟動原理主要是通過 SpringApplication 類來…

代碼隨想錄第55期訓練營第八天|LeetCode344.反轉字符串、541.反轉字符串II、卡碼網:54.替換數字

前言 這是我參加的第二次訓練營!!!爽!這次我將更加細致的寫清每一道難題,不僅是提升自己,也希望我自己的寫的文章對讀者有一定的幫助! 打卡代碼隨想錄算法訓練營第55期第八天(づ&a…

Json的應用實例——cad 二次開發c#

以下是一個使用AutoCAD C#.NET API實現你需求的示例代碼,代碼實現了提示用戶選擇一個實體,將一些字符串變量及其對應的值組成JSON格式數據存儲到實體的擴展數據(XData)中,并在彈出窗口中顯示該實體的所有擴展數據信息。…

Springboot的jak安裝與配置教程

目錄 Windows系統 macOS系統 Linux系統 Windows系統 下載JDK: 訪問Oracle官網或其他JDK提供商網站,下載適合Windows系統的JDK版本。網站地址:Oracle 甲骨文中國 | 云應用和云平臺點擊進入下滑,點擊進入下載根據自己的系統選擇&…

Python與區塊鏈隱私保護技術:如何在去中心化世界中保障數據安全

Python與區塊鏈隱私保護技術:如何在去中心化世界中保障數據安全 在區塊鏈世界里,透明性和不可篡改性是兩大核心優勢,但這也帶來了一個悖論——如何在公開賬本的同時保障用戶隱私?如果你的交易記錄對所有人可見,如何防止敏感信息泄露? Python 作為區塊鏈開發中最受歡迎的…

通俗詳解redis底層數據結構哈希表之漸進式rehash

一、為什么要用漸進式rehash? 假設你家的舊柜子(哈希表)裝滿了,需要換個大柜子。如果一次性把所有東西倒騰到新柜子,你可能得停下手頭所有事,累得半死(這就是傳統rehash的問題:卡頓…

基于 FPGA的HLS技術與應用

1、hls簡介 HLS ( high level synthesis )即高層次綜合,主要是利用高級編程語言實現算法。 2、循環優化 絕大多數循環都以串行的方式執行,這種執行方式比較浪費時間。對于串行的循環有兩種優化方式,轉為 并行( Unrol…

Kafka consumer_offsets 主題深度剖析

Kafka consumer_offsets 主題深度剖析 在 Apache Kafka 的消息消費機制中,確保消息被可靠消費是一個核心問題。為了解決這個問題,Kafka 設計了一個特殊的內部主題 consumer_offsets,用于跟蹤和管理消費者組的消費進度。 consumer_offsets 的…

基于javaweb的SpringBoot時裝購物系統設計與實現(源碼+文檔+部署講解)

技術范圍:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬蟲、數據可視化、小程序、安卓app、大數據、物聯網、機器學習等設計與開發。 主要內容:免費功能設計、開題報告、任務書、中期檢查PPT、系統功能實現、代碼編寫、論文編寫和輔導、論…

B站pwn教程筆記-5

復習和回顧 首先復習一下ELF文件在內存和磁盤中的不同。內存只關注讀寫這權限,會合并一些代碼段。 動態鏈接庫只在內存中單獨裝在一份 因為很多軟件都要用動態鏈接庫了,不可能一個個單獨復制一份。但是在有的調試環境下會單獨顯示出來各一份。 ld.so是裝…

云原生網絡拓撲:服務網格的量子糾纏效應

引言:數據平面的蟲洞躍遷 谷歌服務網格每日處理5萬億請求,Istio 1.20版本時延降低至0.8ms。螞蟻集團Mesh架構節省42%CPU開銷,AWS App Mesh實現100ms跨區故障切換。LinkedIn Envoy配置規則達1200萬條,騰訊云API網關QPS突破900萬。…