OpenCV圖像平滑處理方法詳解

引言
在數字圖像處理中,圖像平滑是一項基礎而重要的預處理技術。它主要用于消除圖像中的噪聲、減少細節層次,為后續的圖像分析(如邊緣檢測、目標識別等)創造更好的條件。OpenCV作為最流行的計算機視覺庫之一,提供了多種圖像平滑方法。本文將詳細介紹這些方法及其應用場景。

一、什么是圖像平滑?
圖像平滑(Image Smoothing)是指通過特定的算法對圖像進行模糊處理,從而達到降噪、去除細節或預處理的目的。這種處理雖然會使圖像變得"模糊",但在許多計算機視覺任務中卻能帶來更好的處理效果。

二、常見的圖像平滑方法
1.先對圖片加上噪聲點

import cv2
import numpy as np
def add_peppersalt_noise(image,n=1000):result = image.copy()h,w = image.shape[:2]   #獲取圖片的高和寬for i in range(n):   #生成n個椒鹽噪聲x = np.random.randint(1,h)y = np.random.randint(1,w)if np.random.randint(0,2) == 0:result[x,y] = 0else:result[x,y] = 255return resultimage = cv2.imread('zhaoyun.jpg')
cv2.imshow('yuantu',image)
cv2.waitKey(0)noise = add_peppersalt_noise(image)
cv2.imshow('noise',noise)
cv2.waitKey(0)

2. 均值濾波(Averaging)

 dst=cv2.blur(src,ksize,anchor,borderType)dst是返回值src是需要處理的圖像ksize是濾波核(卷積核)的大小anchor是錨點,默認值是(-1,-1)一般無需更改borderType是邊界樣式,一般無需更改一般情況下,使用dst=cv2.blur(src,ksize)即可

均值濾波是最簡單的線性濾波方法,它用像素點鄰域的平均值來代替該像素點的值。

blur_1 = cv2.blur(noise,(3,3))   #卷積核為3,3   效果一般,清晰度一般
cv2.imshow('blur_1',blur_1)
cv2.waitKey(0)blur_2 = cv2.blur(noise,(5,5))   #卷積核為5,5   效果稍好但模糊
cv2.imshow('blur_2',blur_2)
cv2.waitKey(0)
cv2.destroyAllWindows()

特點

  • 算法簡單,計算速度快
  • 對高斯噪聲有較好的效果
  • 會導致圖像邊緣模糊

3. 方框濾波(boxFilter)

 dst=cv2.boxFilter(src,deepth,ksize,anchor,normalize,borderType)式中:dst是返回值,表示及進行方框濾波后得到的處理結果。src是需要處理的圖像,即原始圖像deepth是處理結果圖像的圖像深度,一般使用-1表示與原始圖像使用相同的圖像深度。(可以理解為數據類型)ksize是濾波核(卷積核)的大小anchor是錨點(指對應哪個區域),默認值是(-1,-1)一般無需更改normalize 表示在濾波時是否進行歸一化。1.當為True時,歸一化,用鄰域像素值的和除以面級。 此時方框濾波與均值濾波效果相同。2.當為False時,不歸一化,直接使用鄰域像素值的和。和>255時使用255。

方框濾波在平滑圖像的同時能很好地保留邊緣信息,結合了空間鄰近度和像素值相似度。

boxFilter_1 = cv2.boxFilter(noise,-1,(3,3),normalize=True)
cv2.imshow('boxFilter_1',boxFilter_1)
cv2.waitKey(0)
boxFilter_2 = cv2.boxFilter(noise,-1,(3,3),normalize=False)
cv2.imshow('boxFilter_2',boxFilter_2)
cv2.waitKey(0)

4. 中值濾波(Median Blur)

中值濾波用鄰域的中值代替中心像素的值,是一種非線性濾波方法。

medianB = cv2.medianBlur(noise,3)
cv2.imshow('medianBlur',medianB)
cv2.waitKey(0)
cv2.destroyAllWindows()

5. 高斯濾波(Gaussian Blur)

dst=cv2.GaussianBlur(src,ksize[,sigmaX[,sigmaY[,dst]]]) 高斯濾波
# 參數說明:
# src:輸入圖像,通常是一個NumPy數組
# ksize:濾波器的大小,它是一個元組,表示在水平和垂直方向上的像素數量。例如(5,5)表示一個5×5的濾波器。
# sigmaX和sigmaY:分別表示在X軸和Y軸方向上的標準差。這些值與濾波器大小相同。默認情況下,他們都等于0,這意味著沒有高斯模糊。
# dst:輸出圖像,通常是一個NumPy數組。如果位None,則會創建一個新的數組來存儲結果。

高斯濾波是一種加權平均濾波,離中心點越近的像素權重越大,符合高斯分布。

GaussianB = cv2.GaussianBlur(noise,(3,3),1)  
cv2.imshow('GaussianBlur',GaussianB)
cv2.waitKey(0)

特點:
對高斯噪聲有很好的去除效果
比均值濾波更能保留邊緣信息
是許多計算機視覺任務的首選平滑方法
三、方法比較與選擇指南
方法?? ?優點?? ?缺點?? ?適用場景
均值濾波?? ?簡單快速?? ?邊緣模糊嚴重?? ?快速預處理,不關心邊緣
高斯濾波?? ?平滑效果好,計算較快?? ?對椒鹽噪聲效果一般?? ?通用平滑處理,特別是高斯噪聲
中值濾波?? ?對椒鹽噪聲效果好?? ?計算量較大?? ?去除椒鹽噪聲
方框濾波?? ?邊緣保持好?? ?計算復雜度高?? ?需要保留邊緣的去噪
四、總結
圖像平滑是計算機視覺預處理的重要步驟。OpenCV提供了多種平滑方法,各有特點和適用場景。在實際應用中,應根據噪聲類型、邊緣保持需求和計算資源等因素選擇合適的方法。理解這些方法的原理和特點,能夠幫助我們在實際項目中做出更合理的選擇。

希望本文能幫助您更好地理解和應用OpenCV中的圖像平滑技術。在實踐中多嘗試不同的方法和參數,觀察它們的效果差異,這將有助于您掌握這些技術的精髓。

六、2D卷積
? OpenCV提供了多種濾波方式,來是實現平滑圖像的效果,例如均值濾波、方框濾波、高斯濾波、中值濾波等。大多數濾波方式所使用的卷積核都具有一定的靈活性,能夠方便地設置卷積核的大小和數量。但是,我們有時候希望使用特定的卷積核來實現卷積操作,例如使用如下卷積核來進行卷積操作。

前面介紹過的濾波函數都無法將卷積核確定為上述形式,這時要使用OpenCV的自定義卷積函數。

? 在OpenCV中,允許用戶自定義卷積核實現卷積操作,使用自定義卷積核實現卷積操作的函數是cv2.filer2D(),其語法格式為:

dst = cv2.filter2D(src, ddepth, kernel, anchor, delta, borderType)

dst:返回值,均值濾波處理后得到的處理結果。

src:需要處理的圖像,即原始圖像。可以有任意數量的通道,并能對各個通道獨立處理。圖像的深度應該是CV_8U、CV_16U、CV_16S、CV_32F、CV_64F中的一種。

ddepth:結果圖像的圖像深度,一般使用-1表示與原始圖像使用相同的圖像深度。

kenel:卷積核,是一個單通道的數組。如果想在處理彩色圖像時,讓每個通道使用不同的核,則必須將彩色圖像分解后使用不同的核進行操作。

anchor:錨點,其默認值是(-1,-1), 表示當前計算均值的點位于核的中心點位置,改制使用默認值即可,在特殊情況下可以指定不同的點作為錨點。

delta:修正值。可選項,如果該值存在,會在基礎濾波的結果上加上該值作為最終的濾波處理結果。

borderType:邊界樣式,該值決定了以何種方式來處理邊界。一般情況下,不需要考慮該值,直接采用默認值。

通常情況下,使用濾波函數cv2.filter2D()時,對于參數anchor、delta、borderType直接采用默認值即可。

示例: 自定義一個卷積核,通過函數cv2.filter2D()應用該卷積核對圖像進行濾波操作,并顯示濾波結果。

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

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

相關文章

每天兩道算法題:DAY1

題目一:金幣 題目一:金幣 1.題目來源: NOIP2015 普及組 T1,難度紅色,入門簽到題。 2.題目描述: 3.題目解析: 問題轉化:求下面的一個數組的前 k 項和。 4.算法原理: …

C++核心語言元素與構建塊全解析:從語法規范到高效設計

📌 為什么需要雙維度學習C?核心語言元素 → 掌握標準語法規則(避免未定義行為Undefined behavior)構建塊(Building Blocks) → 像搭積木一樣組合功能(提升工程能力) 例如&#xff1a…

RK3588開發板Ubuntu系統燒錄

Ubuntu22.04——YOLOv8模型訓練到RK3588設備部署和推理 文章中給出了通過ARM設備上面的NPU進行深度學習的模型推理過程,在此之前,我們在收到一塊全新的rk3588開發板后,需要對其進行系統的燒錄,這里以Ubuntu22.04系統為例。 目錄 1.獲取待燒錄系統的鏡像 2.燒錄工具準備 2.1…

AI評測的科學之道:當Benchmark遇上統計學

AI評測的科學之道:當Benchmark遇上統計學 —— 如何客觀評估大模型能力,避免落入數據陷阱 在人工智能尤其是大語言模型(LLU)爆發式發展的今天,各類模型榜單(如Open LLM Leaderboard、LMSys Arena&#xff0…

CSS 基礎入門教程:從零開始學習樣式表

一、CSS 簡介CSS(Cascading Style Sheets,層疊樣式表)是一種用于描述 HTML 或 XML 等文檔呈現方式的語言。它是現代網頁設計的三大核心技術之一,與HTML(結構層)和JavaScript(行為層)…

圖解簡單選擇排序C語言實現

1 簡單選擇排序 簡單選擇排序(Simple Selection Sort)是一種基礎且直觀的排序算法,其核心思想是通過重復選擇未排序部分中的最小(或最大)元素,并將其放到已排序部分的末尾,逐步完成整個序列的排…

FPS游戲時,你的電腦都在干什么(CS2)

人物介紹:CPU > 你忠實的處理器 i5-13600KFGPU > 你花大價錢買的顯卡 RTX3060(不是自己的配置,自己的是XEON E5GTX1060,測不出來,上面是社區一個好心大哥的數據,較為精準)&#…

MySQL完整重置密碼流程(針對 macOS)

MySQL完整重置密碼流程(針對 macOS) 1. 強制停止 MySQL 服務 sudo /usr/local/mysql/support-files/mysql.server stop sudo killall mysqld mysqld_safe # 確保所有進程停止2. 以安全模式啟動(跳過權限驗證) sudo /usr/local/my…

Python數據類型轉換詳解:從基礎到實踐

在Python編程中,數據類型轉換是一項基礎且頻繁使用的操作。無論是處理用戶輸入、進行數值計算還是數據處理,都離不開類型轉換。本文將系統介紹Python中的數據類型體系,詳解類型轉換的規則與實踐技巧,幫助你在實際開發中靈活運用。…

智能制造——解讀車企數字化轉型構建高效經營管理數據治理體系【附全文閱讀】

適應人群為車企數字化轉型決策者、數據管理負責人、IT 部門從業者、財務及業務部門管理者。主要內容圍繞車企數字化轉型中經營管理數據治理體系構建展開,核心包括診斷背景(以經營管理數字化為切入點,聚焦財務業務在線化、零點月結等痛點,應對系統與數據問題);現狀診斷(從…

STM32的UART奇偶校驗注意

關鍵點:設置為9位數據位, STM32的UART奇偶校驗注意_stm32串口奇校驗初始化程序-CSDN博客https://blog.csdn.net/JacobFang/article/details/118993643 特此記錄 anlog 2025年8月13日

Origin繪制正態分布直方圖+累積概率圖|科研論文圖表教程(附數據格式模板)

免費查看完整教程(包括數據格式) ↑ ↑ ↑ 目錄 本 期 導 讀 No.1 理解圖形 1 定義 2 圖形特點 3 應用場景 No.2 畫圖教程 1 導入數據,繪制圖形 2 設置繪圖細節 本 期 導 讀 直方圖,以柱狀高低直觀展現各區間數據的分布密度,集中趨勢、離散程度與異常…

Python入門第6課:文件操作之讀寫文本、CSV與JSON文件

Python入門第6課:文件操作之讀寫文本、CSV與JSON文件 作者: 蛋皮 標簽: Python, 文件操作, 讀寫文件, 文本文件, CSV, JSON 在掌握了Python的基礎語法、數據結構和函數之后,你的程序已經能夠處理內存中的數據。但現實世界的數據通常存儲在文件中。無論是用戶的配置信息、日…

基于Uni-app+vue3實現微信小程序地圖固定中心點范圍內拖拽選擇位置功能(分步驟詳解)

一、功能概述與實現步驟1.1 功能需求顯示地圖并固定中心點標記繪制服務區域多邊形邊界實時檢測拖拽后位置是否在服務區內提供位置確認和超出范圍提示功能1.2 實現步驟分解第一步:初始化地圖基礎配置創建Map組件并設置基本屬性定義服務區域多邊形坐標設置地圖初始中心…

《設計模式》抽象工廠模式

1.抽象工廠模式定義 抽象工廠模式(Abstact Factory ): 提供一個創建一系列相關或者相互依賴對象的接口,而無須指定它們具體的類。 1.1 UML圖:2.抽象工廠模式舉例: 業務場景:需要實現一個數據訪問…

git stash臨時保存工作區

通過git stash 可以靈活管理臨時修改,保持工作區整潔,是多人協作或多任務切換時的常用工具,主要用于臨時保存工作區和暫存區修改的命令,常用于以下場景:(1)需要切換分支,但不想立即提…

Vue 3.5+ Teleport defer 屬性詳解:解決組件渲染順序問題的終極方案

📋 概述 Vue 3.5 引入了 Teleport 的 defer 屬性,這是一個重要的延遲解析特性。傳統的 Teleport 在組件掛載時會立即解析目標容器,而 defer 屬性允許推遲 Teleport 的目標解析,直到應用的其他部分掛載完成。 ?? 傳統 Teleport …

【102頁PPT】某著名企業智能制造解決方案及智能工廠產品介紹(附下載方式)

篇幅所限,本文只提供部分資料內容,完整資料請看下面鏈接 https://download.csdn.net/download/2501_92808811/91662620 資料解讀:某著名企業智能制造解決方案及智能工廠產品介紹 詳細資料請看本解讀文章的最后內容 智能制造背景與整體規劃…

Revisiting Character-level Adversarial Attacks for Language Models

文章目錄**核心設計目標****關鍵步驟與實現細節**1. **候選位置選擇(Algorithm 1: get_top_locations)**2. **擾動生成與篩選(Algorithm 2: Charmer)**3. **適配大語言模型(LLM)的攻擊****實驗中的性能表現…

(一)Python + 地球信息科學與技術 (GeoICT)=?

目錄 引子 一、核心定位:Python 為何能重塑 GeoICT? 二、Python 在 GeoICT 中的關鍵應用領域 1. 空間數據處理(GIS 基礎) 2. 遙感圖像處理與解譯 3. 空間分析與建模 4. 地學數據可視化 5. 時空大數據分析 三、Python GeoI…