Python如何去除圖片干擾代碼示例
在Python中去除圖片干擾,需根據(jù)干擾類(lèi)型(如噪聲、特定物體、強(qiáng)光等)選擇合適的方法。以下是分場(chǎng)景解決方案及代碼示例:
一、噪聲去除
1. 高斯噪聲(像素值正態(tài)分布擾動(dòng))
- 方法:高斯濾波、雙邊濾波、小波變換
- 代碼示例(OpenCV):
import cv2 import numpy as np # 讀取圖像并添加高斯噪聲 image = cv2.imread('noisy_image.jpg') noise = np.random.normal(0, 25, image.shape).astype(np.uint8) noisy_image = cv2.add(image, noise) # 高斯濾波去噪 gaussian_filtered = cv2.GaussianBlur(noisy_image, (5, 5), 0) # 雙邊濾波(保留邊緣) bilateral_filtered = cv2.bilateralFilter(noisy_image, d=9, sigmaColor=75, sigmaSpace=75) cv2.imshow('Original', image) cv2.imshow('Gaussian Filtered', gaussian_filtered) cv2.imshow('Bilateral Filtered', bilateral_filtered) cv2.waitKey(0)
2. 椒鹽噪聲(隨機(jī)黑白像素點(diǎn))
- 方法:中值濾波
- 代碼示例(OpenCV):
# 添加椒鹽噪聲(示例) x = image.reshape(-1) SNR = 0.85 noise_num = int(x.size * (1 - SNR)) random_indices = np.random.choice(x.size, noise_num, replace=False) x[random_indices] = np.random.choice([0, 255], noise_num) noisy_image = x.reshape(image.shape) # 中值濾波去噪 median_filtered = cv2.medianBlur(noisy_image, 5)
3. 復(fù)雜噪聲(如偽影)
- 方法:非局部均值去噪(NLM)
- 代碼示例(Scikit-image):
from skimage import io, img_as_float from skimage.restoration import denoise_nl_means image = img_as_float(io.imread('noisy_image.jpg')) denoised = denoise_nl_means(image, h=0.1, fast_mode=True, patch_size=5, patch_distance=3)
二、特定干擾去除
1. 干擾線(如掃描文檔中的橫線)
- 方法:二值化 + 鄰域分析
- 代碼示例(Pillow):
from PIL import Image, ImageFilter def remove_lines(image_path, threshold=128): image = Image.open(image_path).convert('L') # 轉(zhuǎn)為灰度 binarized = image.point(lambda x: 0 if x < threshold else 255, '1') clean = binarized.copy() width, height = binarized.size for y in range(1, height-1): for x in range(1, width-1): if binarized.getpixel((x, y)) == 0: neighbors = [binarized.getpixel((x-1, y)), binarized.getpixel((x+1, y)), binarized.getpixel((x, y-1)), binarized.getpixel((x, y+1))] if neighbors.count(0) >= 2: clean.putpixel((x, y), 255) return clean cleaned_image = remove_lines('document.jpg') cleaned_image.save('cleaned_document.jpg')
2. 強(qiáng)光干擾(過(guò)曝區(qū)域)
- 方法:顏色空間轉(zhuǎn)換 + 閾值調(diào)整
- 代碼示例(OpenCV):
import cv2 import numpy as np image = cv2.imread('overexposed.jpg') hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV) lower = np.array([0, 0, 200]) # V通道閾值 upper = np.array([180, 255, 255]) mask = cv2.inRange(hsv, lower, upper) # 降低過(guò)曝區(qū)域亮度 image[mask != 0] = cv2.add(image[mask != 0], (0, 0, -80)) cv2.imwrite('corrected.jpg', image)
三、深度學(xué)習(xí)進(jìn)階方案
對(duì)于復(fù)雜場(chǎng)景(如混合噪聲、紋理干擾),可使用預(yù)訓(xùn)練模型(如U-Net、DnCNN):
import torch
from torchvision import models
# 加載預(yù)訓(xùn)練去噪模型(示例)
model = models.DnCNN().eval()
model.load_state_dict(torch.load('dncnn_pretrained.pth'))
# 預(yù)處理輸入
input_tensor = preprocess(noisy_image) # 需自定義預(yù)處理函數(shù)
with torch.no_grad():
output = model(input_tensor)
denoised_image = postprocess(output) # 自定義后處理函數(shù)
四、方法選擇建議
- 快速去噪:優(yōu)先使用OpenCV/Pillow的內(nèi)置濾波器(如
cv2.medianBlur)。 - 保留細(xì)節(jié):選擇雙邊濾波或小波變換。
- 復(fù)雜噪聲:嘗試Scikit-image的非局部均值或深度學(xué)習(xí)模型。
- 特定干擾:結(jié)合二值化、形態(tài)學(xué)操作或自定義像素分析邏輯。
通過(guò)調(diào)整濾波器參數(shù)(如核大小、閾值)或模型超參數(shù),可進(jìn)一步優(yōu)化去噪效果。
到此這篇關(guān)于Python如何去除圖片干擾的文章就介紹到這了,更多相關(guān)Python去除圖片干擾內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
如何用python和java分別寫(xiě)出10道經(jīng)典題(含代碼)
Python與Java在語(yǔ)言特性、性能和應(yīng)用場(chǎng)景上各有優(yōu)勢(shì),下面這篇文章主要介紹了如何用python和java分別寫(xiě)出10道經(jīng)典題的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2026-05-05
Python計(jì)算一個(gè)點(diǎn)到所有點(diǎn)的歐式距離實(shí)現(xiàn)方法
今天小編就為大家分享一篇Python計(jì)算一個(gè)點(diǎn)到所有點(diǎn)的歐式距離實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-07-07
使用Django中的filter方法進(jìn)行數(shù)據(jù)查詢(xún)的基本操作
在 Django 中,QuerySet 的 filter() 方法是一個(gè)強(qiáng)大的工具,用于從數(shù)據(jù)庫(kù)中檢索數(shù)據(jù)并根據(jù)指定的條件進(jìn)行篩選,在本文中,我們將介紹如何使用 filter() 方法來(lái)執(zhí)行各種類(lèi)型的數(shù)據(jù)查詢(xún)操作,需要的朋友可以參考下2024-05-05
Django項(xiàng)目創(chuàng)建的圖文教程
本文主要介紹了Django項(xiàng)目創(chuàng)建的圖文教程,文中通過(guò)圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-03-03
解決Python中pandas讀取*.csv文件出現(xiàn)編碼問(wèn)題
很多朋友在使用Python中pandas讀取csv文件時(shí),出現(xiàn)編碼格式問(wèn)題,接下來(lái)通過(guò)本文給大家分享解決Python中pandas讀取*.csv文件出現(xiàn)編碼問(wèn)題,需要的朋友可以參考下2019-07-07
在Python中將函數(shù)作為另一個(gè)函數(shù)的參數(shù)傳入并調(diào)用的方法
今天小編就為大家分享一篇在Python中將函數(shù)作為另一個(gè)函數(shù)的參數(shù)傳入并調(diào)用的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-01-01
Python實(shí)現(xiàn)普通圖片轉(zhuǎn)ico圖標(biāo)的方法詳解
ICO是一種圖標(biāo)文件格式,圖標(biāo)文件可以存儲(chǔ)單個(gè)圖案、多尺寸、多色板的圖標(biāo)文件。本文將利用Python實(shí)現(xiàn)普通圖片轉(zhuǎn)ico圖標(biāo),感興趣的小伙伴可以了解一下2022-11-11
Pytorch實(shí)現(xiàn)ResNet網(wǎng)絡(luò)之Residual Block殘差塊
這篇文章主要為大家介紹了Pytorch實(shí)現(xiàn)ResNet網(wǎng)絡(luò)之Residual Block殘差塊實(shí)現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-04-04

