[Python]使用 PyQt5 和 OpenCV 製作圖片異物移除工具

更新 發佈閱讀 5 分鐘

拍攝時鏡頭有時候有粉塵或毛髮不管什麼的異物,拍攝完回家檢查圖片才發現有異物真的會氣死。

框選異物

raw-image

修復後

raw-image

這篇教學文章將介紹如何使用 PyQt5 和 OpenCV 來製作一款圖片異物修復工具。這個工具允許使用者載入圖片、框選異物區域,並使用 OpenCV 的 inpaint 方法來修復圖片,達到移除異物的目的。讓我們開始吧!

使用 PyQt5 和 OpenCV 製作圖片異物修復工具

在影像處理領域中,異物移除是一項常見的需求。例如,一張完美的照片可能被灰塵、文字或其他不需要的元素干擾。本篇教學將引導你使用 PyQt5 建立圖形化介面(GUI),並利用 OpenCV 的影像修復技術來移除異物。

1. 環境準備

在開始之前,請確保你已經安裝以下必要的 Python 套件:

pip install opencv-python numpy PyQt5

2. 功能概述

此工具提供以下核心功能:

  • 載入圖片
  • 框選異物區域
  • 選擇修復方法(TELEA 或 NS)
  • 調整修復半徑
  • 修復異物
  • 清除選區
  • 另存圖片

3. 核心程式碼解析

3.1 介面設計

使用 PyQt5 來設計 GUI,核心介面包括:

  • 主視窗(ImageEditor):負責圖片載入、顯示、框選異物區域及修復圖片。
  • 圖片標籤(ImageLabel):監聽滑鼠事件,讓使用者框選需要修復的區域。
  • 選單與按鈕:提供修復選項與操作功能。

3.2 異物修復

異物修復的核心方法來自 OpenCVcv2.inpaint(),它透過兩種演算法來修復選定區域:

  • INPAINT_TELEA:更適合修復小範圍異物。
  • INPAINT_NS:適用於較大範圍的修復。

修復流程:

  1. 使用者選取區域。
  2. 建立遮罩 mask,將選定區域標記為 255(需要修復)。
  3. 使用 cv2.inpaint() 進行修復。
method_flag = cv2.INPAINT_TELEA if self.method_combo.currentText() == "TELEA" else cv2.INPAINT_NS
radius = self.radius_slider.value()
repaired = cv2.inpaint(self.image, self.mask, radius, method_flag)
self.image = repaired
self.mask[:] = 0
self.rects.clear()
self.update_display()

3.3 圖片顯示與框選

為了讓使用者能夠方便選取異物區域,我們使用 QLabel 監聽滑鼠事件,並計算座標:

def get_image_coordinates(self, global_pos):
label_pos = self.image_label.mapFromGlobal(global_pos)
label_width = self.image_label.width()
label_height = self.image_label.height()
img_height, img_width = self.image.shape[:2]
scale = min(label_width / img_width, label_height / img_height)
x = (label_pos.x() - (label_width - img_width * scale) // 2) / scale
y = (label_pos.y() - (label_height - img_height * scale) // 2) / scale
return int(x), int(y)

這段程式碼確保滑鼠點擊能準確對應到圖片中的座標。


4. 執行程式

你可以直接運行 ImageEditor 來使用工具:

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

5. 結論

這款圖片異物修復工具能夠輕鬆移除照片中的不必要物件,適用於圖片編修、影像處理等應用。你可以進一步擴充功能,例如:

  • 讓使用者手動調整遮罩
  • 提供更多修復選項
  • 儲存修復歷史,方便回溯









留言
avatar-img
留言分享你的想法!
avatar-img
螃蟹_crab的沙龍
155會員
302內容數
本業是影像辨識軟體開發,閒暇時間進修AI相關內容,將學習到的內容寫成文章分享。 興趣是攝影,踏青,探索未知領域。 人生就是不斷的挑戰及自我認清,希望老了躺在床上不會後悔自己什麼都沒做。
螃蟹_crab的沙龍的其他內容
2025/03/24
在影像處理或機器學習的應用中,我們常常需要將影片逐幀擷取出來,進一步進行辨識或分析。 本篇教學將示範如何使用 Python + OpenCV 來: ✅ 讀取 MP4 影片 測試影片可由下方超連結下載,從file-examples.com下載 file-examples.com 是一個 免費提
Thumbnail
2025/03/24
在影像處理或機器學習的應用中,我們常常需要將影片逐幀擷取出來,進一步進行辨識或分析。 本篇教學將示範如何使用 Python + OpenCV 來: ✅ 讀取 MP4 影片 測試影片可由下方超連結下載,從file-examples.com下載 file-examples.com 是一個 免費提
Thumbnail
2024/10/11
本文將指導你如何修改現有的 OpenCV 程式碼,使其利用 CUDA 加速進行深度神經網絡(DNN)推理,如超分辨率圖像放大任務。這將顯著提升運行速度,特別是在高分辨率圖像處理中。 在CMake上這選項要開,才可支援DNN模組。 CMake編譯OpenCV教學文 連結 [OpenCV][Py
Thumbnail
2024/10/11
本文將指導你如何修改現有的 OpenCV 程式碼,使其利用 CUDA 加速進行深度神經網絡(DNN)推理,如超分辨率圖像放大任務。這將顯著提升運行速度,特別是在高分辨率圖像處理中。 在CMake上這選項要開,才可支援DNN模組。 CMake編譯OpenCV教學文 連結 [OpenCV][Py
Thumbnail
2024/10/10
OpenCV 提供了專門針對 CUDA 優化的模組,這些模組使用 cv2.cuda 命名空間,並且可以直接使用 GPU 進行加速。,cv2.cuda 模塊需要在 OpenCV 編譯時啟用 CUDA 支援才能使用。 本文主要比較經過CMAKE重新編譯OpenCV使其支援Cuda,原OpenCV只支援
Thumbnail
2024/10/10
OpenCV 提供了專門針對 CUDA 優化的模組,這些模組使用 cv2.cuda 命名空間,並且可以直接使用 GPU 進行加速。,cv2.cuda 模塊需要在 OpenCV 編譯時啟用 CUDA 支援才能使用。 本文主要比較經過CMAKE重新編譯OpenCV使其支援Cuda,原OpenCV只支援
Thumbnail
看更多
你可能也想看
Thumbnail
搬家不只添購必需品,更能透過蝦皮分潤計畫賺取零用金!本文分享近期搬家時添購的各種實用好物,包含多功能工作桌、電競椅、氣炸烤箱、收納神器等,並詳述如何透過蝦皮雙 11 活動聰明購物、善用優惠,同時利用分潤機制將敗家行為轉化為被動收入,推薦給想聰明消費又想賺額外收入的你!
Thumbnail
搬家不只添購必需品,更能透過蝦皮分潤計畫賺取零用金!本文分享近期搬家時添購的各種實用好物,包含多功能工作桌、電競椅、氣炸烤箱、收納神器等,並詳述如何透過蝦皮雙 11 活動聰明購物、善用優惠,同時利用分潤機制將敗家行為轉化為被動收入,推薦給想聰明消費又想賺額外收入的你!
Thumbnail
貓奴每月進貢的時間又來啦! 身為專業貢品官,我從蝦皮搜尋各種零食,只為取悅家中三位貓主子!結果究竟會是龍心大悅,亦或是冷眼相待,就讓我們繼續看下去~
Thumbnail
貓奴每月進貢的時間又來啦! 身為專業貢品官,我從蝦皮搜尋各種零食,只為取悅家中三位貓主子!結果究竟會是龍心大悅,亦或是冷眼相待,就讓我們繼續看下去~
Thumbnail
本文將說明如何去辨識出圖片文字​位置及高寬。
Thumbnail
本文將說明如何去辨識出圖片文字​位置及高寬。
Thumbnail
在影像處理中,有時候我們只想特別關注某個感興趣的區域時,就是ROI的概念,擷取此範圍的圖像來做處理。 設定超過圖像邊界時就會報錯,本文主要介紹如何擷取影像的同時,避免設定錯誤造成程式崩潰的狀況。 擷取圖像示意圖 ROI程式範例 import cv2 import numpy as np
Thumbnail
在影像處理中,有時候我們只想特別關注某個感興趣的區域時,就是ROI的概念,擷取此範圍的圖像來做處理。 設定超過圖像邊界時就會報錯,本文主要介紹如何擷取影像的同時,避免設定錯誤造成程式崩潰的狀況。 擷取圖像示意圖 ROI程式範例 import cv2 import numpy as np
Thumbnail
在影像辨識中,若遇到物件與背景難以分辨的狀況下,先做一下色彩分析,知道了色彩強度階層上的像素數,有助於了解後續需要做什麼處理,比較好分割出辨識物。 若想辨識的物件與背景的RGB值過於接近,也比較好說明此狀況,為什麼較難分割出物件。 成果呈現 第一張圖:左邊為原圖,右邊為分析結果的圖,用其他顏
Thumbnail
在影像辨識中,若遇到物件與背景難以分辨的狀況下,先做一下色彩分析,知道了色彩強度階層上的像素數,有助於了解後續需要做什麼處理,比較好分割出辨識物。 若想辨識的物件與背景的RGB值過於接近,也比較好說明此狀況,為什麼較難分割出物件。 成果呈現 第一張圖:左邊為原圖,右邊為分析結果的圖,用其他顏
Thumbnail
接續上一邊,分割了螺絲與螺母的圖像,但分割後的結果,因為螺絲過於接近的關係,沒有切割乾淨,會有其他螺絲的頭或者身體,這樣會影響到後續量測。 [OpenCV應用][Python]擷取出螺絲或螺母的影像 本文主要是,如何去除掉不要的背景雜物。 下層為原先分割的圖,上層為去除背景雜物的圖。
Thumbnail
接續上一邊,分割了螺絲與螺母的圖像,但分割後的結果,因為螺絲過於接近的關係,沒有切割乾淨,會有其他螺絲的頭或者身體,這樣會影響到後續量測。 [OpenCV應用][Python]擷取出螺絲或螺母的影像 本文主要是,如何去除掉不要的背景雜物。 下層為原先分割的圖,上層為去除背景雜物的圖。
Thumbnail
常見的圖像銳利化方法: 銳化濾波器 增強對比度 Unsharp Masking
Thumbnail
常見的圖像銳利化方法: 銳化濾波器 增強對比度 Unsharp Masking
Thumbnail
拍好得照片發現有些不該入鏡的內容,這時若有類似橡皮擦的功能可以直接擦掉,那該多好啊! 這種小事,就讓美圖秀秀來幫你處理吧 請先進入美圖秀秀桌面程式 進入後來到首頁畫面,找到AI消除的圖示後 點按即可進入AI消除製作畫面 美圖秀秀會幫我們進入手機的相片 圖庫中讓您挑選要處理的照片,點按目標
Thumbnail
拍好得照片發現有些不該入鏡的內容,這時若有類似橡皮擦的功能可以直接擦掉,那該多好啊! 這種小事,就讓美圖秀秀來幫你處理吧 請先進入美圖秀秀桌面程式 進入後來到首頁畫面,找到AI消除的圖示後 點按即可進入AI消除製作畫面 美圖秀秀會幫我們進入手機的相片 圖庫中讓您挑選要處理的照片,點按目標
Thumbnail
上一篇提到利用cv2.inRangex,建立遮罩來過濾出紅球。這次我們稍微更動一下程式碼,將紅球變顏色。 [OpenCV][Python]利用cv2.inRange搭配cv2.bitwise_and過濾紅球 結果圖 將紅球改變顏色成藍球
Thumbnail
上一篇提到利用cv2.inRangex,建立遮罩來過濾出紅球。這次我們稍微更動一下程式碼,將紅球變顏色。 [OpenCV][Python]利用cv2.inRange搭配cv2.bitwise_and過濾紅球 結果圖 將紅球改變顏色成藍球
Thumbnail
涉及圖像處理和計算機視覺時,色彩空間轉換是一個常見操作,應用如下: 降維: 將一張彩色圖像轉換為灰度圖像可以減少數據的維度,簡化處理過程,同時在某些情況下保留重要的視覺信息。 突顯特徵: 在某些情況下,某些色彩通道可能包含冗餘或不必要的信息,通過轉換到其他色彩空間,可以更好地突顯圖像中的重要特徵
Thumbnail
涉及圖像處理和計算機視覺時,色彩空間轉換是一個常見操作,應用如下: 降維: 將一張彩色圖像轉換為灰度圖像可以減少數據的維度,簡化處理過程,同時在某些情況下保留重要的視覺信息。 突顯特徵: 在某些情況下,某些色彩通道可能包含冗餘或不必要的信息,通過轉換到其他色彩空間,可以更好地突顯圖像中的重要特徵
Thumbnail
EasyOCR是一個能夠幫助你對圖片中的文字進行辨識的工具,透過進階分析,可以應用在文件掃描、自動化數據輸入、發票掃描等領域。本章節將介紹如何安裝、引用模型、進行文字辨識、以及辨識結果的分析。透過學習,你可以建立屬於自己的文字辨識系統。
Thumbnail
EasyOCR是一個能夠幫助你對圖片中的文字進行辨識的工具,透過進階分析,可以應用在文件掃描、自動化數據輸入、發票掃描等領域。本章節將介紹如何安裝、引用模型、進行文字辨識、以及辨識結果的分析。透過學習,你可以建立屬於自己的文字辨識系統。
Thumbnail
[影像處理_OpenCV Python]使用Python撰寫影像處理功能,圖片遮罩或濾除掉不要的地方,旋轉圖片 以下範例將呈現影像處理三種不同的應用: 遮罩的實現 濾除 旋轉
Thumbnail
[影像處理_OpenCV Python]使用Python撰寫影像處理功能,圖片遮罩或濾除掉不要的地方,旋轉圖片 以下範例將呈現影像處理三種不同的應用: 遮罩的實現 濾除 旋轉
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News