OpenCV--圖像平滑處理

在數字圖像處理領域,圖像平滑處理是一項極為重要的技術,廣泛應用于計算機視覺、醫學影像分析、安防監控等多個領域。在 OpenCV 這一強大的計算機視覺庫的助力下,我們能便捷地實現多種圖像平滑算法。本文將深入探討圖像平滑的原理,結合 OpenCV 的代碼示例,闡述均值濾波、高斯濾波、中值濾波和雙邊濾波這幾種常見的平滑算法。

一、圖像平滑處理簡介

圖像在獲取或傳輸過程中,常受到噪聲干擾,降低圖像質量,影響后續分析與處理。圖像平滑處理旨在通過去除噪聲,改善圖像質量,突出主要信息。其本質是對圖像像素進行鄰域操作,用鄰域內像素的某種統計特征替代當前像素值。在 OpenCV 中,提供了豐富的函數和工具,幫助我們實現各類平滑算法。

二、均值濾波

1. 原理

均值濾波是最簡單的圖像平滑算法,它基于鄰域平均的思想,以某像素鄰域內所有像素的平均值替代該像素值。假設以當前像素為中心,定義一個大小為\(N\times N\)的窗口,窗口內所有像素的平均值,就是當前像素的新值。以 3x3 的窗口為例,每個像素點的新值由其周圍 9 個像素(包括自身)的平均值決定。均值濾波能有效降低圖像中的隨機噪聲,但在平滑圖像的同時,可能模糊圖像邊緣,損失圖像細節。

2. OpenCV 實現

在 OpenCV 中,使用cv2.blur()函數實現均值濾波,該函數的第一個參數為輸入圖像,第二個參數為內核大小。以下是一個簡單的示例:

import cv2import numpy as npimport matplotlib.pyplot as plt# 讀取圖像img = cv2.imread('test.jpg')img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)# 均值濾波blurred = cv2.blur(img, (5, 5))# 顯示結果plt.subplot(121), plt.imshow(img), plt.title('Original')plt.xticks([]), plt.yticks([])plt.subplot(122), plt.imshow(blurred), plt.title('Blurred')plt.xticks([]), plt.yticks([])plt.show()

三、高斯濾波

1. 原理

高斯濾波是一種廣泛應用的線性平滑濾波,它基于高斯分布對鄰域像素進行加權平均。相比均值濾波對鄰域內所有像素一視同仁,高斯濾波賦予中心像素更高的權重,離中心越遠的像素權重越低。高斯分布由標準差\(\sigma\)決定,\(\sigma\)越大,高斯核越寬,平滑效果越明顯,但圖像也越模糊。高斯濾波能在有效去除噪聲的同時,較好地保留圖像邊緣和細節,在實際應用中表現出色。

2. OpenCV 實現

OpenCV 提供cv2.GaussianBlur()函數實現高斯濾波。該函數的第一個參數為輸入圖像,第二個參數為高斯核大小,第三個參數為 X 方向的標準差。如果第三個參數為 0,OpenCV 會根據高斯核大小自動計算標準差。示例代碼如下:

import cv2import numpy as npimport matplotlib.pyplot as plt# 讀取圖像img = cv2.imread('test.jpg')img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)# 高斯濾波gaussian_blurred = cv2.GaussianBlur(img, (5, 5), 0)# 顯示結果plt.subplot(121), plt.imshow(img), plt.title('Original')plt.xticks([]), plt.yticks([])plt.subplot(122), plt.imshow(gaussian_blurred), plt.title('Gaussian Blurred')plt.xticks([]), plt.yticks([])plt.show()

四、中值濾波

1. 原理

中值濾波是一種非線性平滑算法,它將像素鄰域內的所有像素值進行排序,取中間值作為當前像素的新值。中值濾波對椒鹽噪聲等脈沖噪聲有很好的抑制作用,能有效保留圖像邊緣,避免圖像模糊。與均值濾波和高斯濾波不同,中值濾波不是基于加權平均,而是通過排序選擇中間值,因此在處理含有大量噪聲的圖像時,具有獨特的優勢。

2. OpenCV 實現

在 OpenCV 中,使用cv2.medianBlur()函數實現中值濾波。該函數的第一個參數為輸入圖像,第二個參數為內核大小,內核大小必須為奇數。示例如下:

import cv2import numpy as npimport matplotlib.pyplot as plt# 讀取圖像img = cv2.imread('test.jpg')img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)# 中值濾波median_blurred = cv2.medianBlur(img, 5)# 顯示結果plt.subplot(121), plt.imshow(img), plt.title('Original')plt.xticks([]), plt.yticks([])plt.subplot(122), plt.imshow(median_blurred), plt.title('Median Blurred')plt.xticks([]), plt.yticks([])plt.show()

五、方框濾波?

1. 原理?

方框濾波是一種線性濾波方法,其操作與均值濾波極為相似。它以當前像素為中心劃定一個矩形框(內核),將框內所有像素的和或者平均值,作為當前像素的輸出值。方框濾波有歸一化和非歸一化兩種模式。在歸一化模式下,計算內核區域內像素的平均值,等同于均值濾波;非歸一化模式則直接返回內核區域內像素的總和,這種情況下輸出值可能超出圖像數據類型的表示范圍,需進行額外處理。?

2. OpenCV 實現?

在 OpenCV 中,通過cv2.boxFilter()函數實現方框濾波,該函數的參數包括輸入圖像、輸出圖像深度、內核大小,此外還可指定錨點位置、是否歸一化以及邊界處理方式。下面是使用cv2.boxFilter()進行方框濾波的示例:?

import cv2
import numpy as np
import matplotlib.pyplot as plt# 讀取圖像
img = cv2.imread('test.jpg')
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)# 方框濾波,歸一化模式
box_blurred = cv2.boxFilter(img, -1, (5, 5), normalize = True)# 顯示結果
plt.subplot(121), plt.imshow(img), plt.title('Original')
plt.xticks([]), plt.yticks([])
plt.subplot(122), plt.imshow(box_blurred), plt.title('Box Blurred')
plt.xticks([]), plt.yticks([])
plt.show()

六、總結

本文詳細介紹了 OpenCV 中的圖像平滑處理技術,包括均值濾波、高斯濾波、中值濾波和雙邊濾波。每種算法都有其獨特的原理和適用場景,均值濾波簡單快速,但易模糊圖像邊緣;高斯濾波在去除噪聲的同時能較好保留圖像細節;中值濾波對脈沖噪聲有很好的抑制效果;雙邊濾波則能在平滑圖像的同時,有效保留圖像邊緣。在實際應用中,需根據圖像特點和處理需求,選擇合適的平滑算法,達到最佳的處理效果。

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

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

相關文章

性能優化利器:前后端防抖方案解析

精心整理了最新的面試資料和簡歷模板,有需要的可以自行獲取 點擊前往百度網盤獲取 點擊前往夸克網盤獲取 在Web開發中,高頻觸發的事件(如用戶輸入、按鈕點擊、滾動監聽等)可能導致性能問題或資源浪費。防抖(Debounce&…

【ES系列】Elasticsearch簡介:為什么需要它?(基礎篇)

?? 本文將詳細介紹Elasticsearch的前世今生,以及為什么它在當今的技術棧中如此重要。本文是ES起飛之路系列的基礎篇第一章,適合想要了解ES的讀者。 文章目錄 一、什么是Elasticsearch?1. ES的定義2. ES的核心特性2.1 分布式存儲2.2 實時搜索2.3 高可用性2.4 RESTful API3.…

用 HTML 網頁來管理 Markdown 標題序號

文章目錄 工具介紹核心優勢使用指南基本使用方法注意事項 部分截圖完整代碼 工具介紹 在日常的文檔編寫和博客創作中,Markdown因其簡潔的語法和良好的可讀性而廣受歡迎。然而,當文檔結構復雜、標題層級較多時,手動維護標題序號不僅耗時耗力&…

批量將 Markdown 轉換為 Word/PDF 等其它格式

在工作當中,我們經常會接觸到 Markdown 格式的文檔。這是一種非常方便我們做記錄,做筆記的一種格式文檔。現在很多互聯網編輯器都是支持 Markdown 格式的,編輯起文章來更加的方便簡介。有時候,我們會碰到需要將 Markdown 格式的文…

劍指Offer(數據結構與算法面試題精講)C++版——day8

劍指Offer(數據結構與算法面試題精講)C版——day8 題目一:鏈表中環的入口節點題目二:兩個鏈表的第1個重合節點題目三:反轉鏈表附錄:源碼gitee倉庫 題目一:鏈表中環的入口節點 這道題的有如下三個…

【BFT帝國】20250409更新PBFT總結

2411 2411 2411 Zhang G R, Pan F, Mao Y H, et al. Reaching Consensus in the Byzantine Empire: A Comprehensive Review of BFT Consensus Algorithms[J]. ACM COMPUTING SURVEYS, 2024,56(5).出版時間: MAY 2024 索引時間(可被引用): 240412 被引:…

前端用用jsonp的方式解決跨域問題

前端用用jsonp的方式解決跨域問題 前端用用jsonp的方式解決跨域問題 前端用用jsonp的方式解決跨域問題限制與缺點:前端后端測試使用示例 限制與缺點: 不安全、只能使用get方式、后臺需要相應jsonp方式的傳參 前端 function jsonp(obj) {// 動態生成唯…

MySQL詳解最新的官方備份方式Clone Plugin

一、Clone Plugin的動態安裝 install plugin clone soname mysql_clone.so;select plugin_name,plugin_status from information_schema.plugins where plugin_name clone; 二、Clone Plugin配置持久化 在 MySQL 配置文件my.cnf中添加以下內容,確保插件在 MySQL …

解決python manage.py shell ModuleNotFoundError: No module named xxx

報錯如下&#xff1a; python manage.py shellTraceback (most recent call last):File "/Users/z/Documents/project/c/manage.py", line 10, in <module>execute_from_command_line(sys.argv)File "/Users/z/.virtualenvs/c/lib/python3.12/site-packa…

鴻蒙NEXT開發資源工具類(ArkTs)

import { AppUtil } from ./AppUtil; import { StrUtil } from ./StrUtil; import { resourceManager } from kit.LocalizationKit;/*** 資源工具類。* 提供訪問應用資源的能力&#xff0c;包括布爾值、數字、字符串等資源的獲取。** author 鴻蒙布道師* since 2025/04/08*/ ex…

css使用mix-blend-mode的值difference實現內容和父節點反色

1. 使用場景 往往開發過程中&#xff0c;經常遇到產品說你這個背景圖和文字顏色太接近了&#xff0c;能不能適配下背景圖&#xff0c;讓用戶能夠看清具體內容是啥。 這么說吧&#xff0c;這種需求場景非常合理&#xff0c;因為你做開發就是要給用戶一個交代&#xff0c;給他們…

el-input 中 select 方法使用報錯:屬性“select”在類型“HTMLElement”上不存在

要解決該錯誤&#xff0c;需明確指定元素類型為 HTMLInputElement&#xff0c;因為 select() 方法屬于輸入元素。 步驟解釋&#xff1a; 類型斷言&#xff1a;使用 as HTMLInputElement 將元素類型斷言為輸入元素。 可選鏈操作符&#xff1a;保持 ?. 避免元素為 null 時出錯…

Mybatis Plus與SpringBoot的集成

Mybatis Plus與SpringBoot的集成 1.引入Maven 依賴2.配置application.yml文件3.創建實體類4.分頁插件5.邏輯刪除功能6.忽略特定字段7.自動填充 1.引入Maven 依賴 提前創建好一個SpringBoot項目&#xff0c;然后在項目中引入MyBatis Plus依賴 <dependency><groupId&g…

大數據學習(104)-clickhouse與hdfs

&#x1f34b;&#x1f34b;大數據學習&#x1f34b;&#x1f34b; &#x1f525;系列專欄&#xff1a; &#x1f451;哲學語錄: 用力所能及&#xff0c;改變世界。 &#x1f496;如果覺得博主的文章還不錯的話&#xff0c;請點贊&#x1f44d;收藏??留言&#x1f4dd;支持一…

【簡歷全景認知2】電子化時代對簡歷形式的降維打擊:從A4紙到ATS的生存游戲

一、當簡歷遇上數字洪流:傳統形式的式微 在1990年代,一份排版精美的紙質簡歷還能讓HR眼前一亮;但今天,超過75%的 Fortune 500 企業使用ATS(Applicant Tracking System)進行初篩,未優化的簡歷可能在5秒內就會淪為數字廢土。這種變遷本質上符合「技術接納生命周期」理論—…

esp32cam -> 服務器 | 手機 -> 服務器 直接服務器傳輸圖片

服務器先下載python &#xff1a; 一、Python環境搭建&#xff08;CentOS/Ubuntu通用&#xff09; 一條一條執行 安裝基礎依賴 # CentOS sudo yum install gcc openssl-devel bzip2-devel libffi-devel zlib-devel # Ubuntu sudo apt update && sudo apt install b…

SeaTunnel系列之:Apache SeaTunnel編譯和安裝

Apache SeaTunnel編譯 Prepare編譯克隆源代碼本地安裝子項目從源代碼構建 SeaTunnel構建子模塊安裝 JetBrains IDEA Scala 插件安裝 JetBrains IDEA Lombok 插件代碼風格運行簡單示例不僅如此 安裝下載 SeaTunnel 發布包下載連接器插件從源代碼構建 SeaTunnel 運行 SeaTunnel 在…

JavaScript/React中,...(三個連續的點)被稱為 擴展運算符(Spread Operator) 或 剩余運算符(Rest Operator)

const processOrder (order) > {const tax order.total * 0.1;const finalAmount order.total tax;return { ...order, tax, finalAmount }; }; 解釋一下&#xff0c;特別&#xff1a;...?在JavaScript/React中&#xff0c;...&#xff08;三個連續的點&#xff09;被稱…

FRP的proxies只是建立通道,相當于建立與服務器溝通的不同通道而不是直接將路由器與服務器云端溝通

沒有更好的辦法了嗎&#xff0c;我看frpc.toml的里面可以設置兩個proxies那我esp32的監聽端口設置在frpc.toml里面它不也能跟云服務器建立聯系嗎&#xff0c;比如遠程與本地端口都配置為5112那云服務器接收到的5112訪問會以frp配置的本地端口5112轉發到frp客戶端的路由器&#…

#在docker中啟動mysql之類的容器時,沒有掛載的數據...在后期怎么把數據導出外部

如果要導出 Docker 容器內的 整個目錄&#xff08;包含所有文件及子目錄&#xff09;&#xff0c;可以使用以下幾種方法&#xff1a; 方法 1&#xff1a;使用 docker cp 直接復制目錄到宿主機 適用場景&#xff1a;容器正在運行或已停止&#xff08;但未刪除&#xff09;。 命…