計算機視覺(七):膨脹操作

在計算機視覺中,膨脹是一種基本的形態學操作,主要用于處理和分析圖像的形狀。它通過“膨脹”或“放大”圖像中的前景對象來增加其尺寸或連接斷開的區域。

膨脹操作的工作原理類似于卷積,但使用的是結構元素 (structuring element),也稱為核 (kernel)。結構元素是一個小的矩陣或模板,它定義了膨脹操作的鄰域和形狀。

工作原理

膨脹操作會遍歷圖像中的每一個像素。對于每個像素,它會將結構元素的中心放在該像素上,然后檢查結構元素覆蓋的區域。如果結構元素覆蓋的任何像素與前景像素(通常為白色或高值)重疊,那么該中心像素的輸出值就會被設置為前景值。

簡單來說,如果一個像素周圍的鄰域里有任何一個前景像素,那么這個像素本身也會被“膨脹”成前景像素。

舉個例子:

  • 輸入圖像: 一個黑底白字的圖像,其中有一個小的白色點。
  • 結構元素: 一個 3x3 的方形矩陣。
  • 操作: 膨脹操作會以這個白色點為中心,將周圍 3x3 區域內的所有黑色像素都變成白色。結果是,這個小點“膨脹”成了一個 3x3 的白色方塊。

實際應用

  • 連接斷開的區域: 當圖像中的對象因為噪聲或處理不當而出現小間隙或斷裂時,膨脹操作可以有效地填充這些間隙,將斷開的部分連接起來。

  • 增加物體尺寸: 可以用來增大圖像中前景物體的尺寸,例如,將細線加粗或放大文字。

  • 橋接漏洞: 對于圖像中由于孔洞或空隙造成的“假”斷裂,膨脹可以很好地將其彌合,使其成為一個完整的形狀。

  • 形態學開閉運算的基礎: 膨脹和腐蝕 (Erosion) 是形態學開運算和閉運算的基本組成部分。

    • 閉運算 (Closing): 先膨脹后腐蝕,用于填充物體內部的小孔或連接斷開的線條。

    • 開運算 (Opening): 先腐蝕后膨脹,用于消除小的噪點或平滑物體邊界。

opencv實現膨脹操作示例

import cv2
import numpy as np
import matplotlib.pyplot as plt# 1. 讀取圖像
# 假設你有一張名為 'test.jpg' 的二值圖像
# 或者你可以創建一個簡單的二值圖像進行測試
# 比如一個帶有斷裂線條的圖像
image = cv2.imread('test1.jpg', cv2.IMREAD_GRAYSCALE)# 如果你沒有圖像,可以運行下面這段代碼生成一個簡單的測試圖像
if image is None:print("圖像文件未找到,正在生成測試圖像...")# 創建一個 100x100 的黑色圖像image = np.zeros((100, 100), dtype=np.uint8)# 在圖像中繪制一些白色的點或線條image[20:30, 20:30] = 255  # 一個白色方塊image[40:41, 50:70] = 255  # 一條白線image[42:43, 50:70] = 255  # 另一條白線 (與上一條線有微小間隙)# 2. 定義結構元素 (Structuring Element / Kernel)
# 結構元素決定了膨脹操作的形狀和大小。
# 這里我們創建一個 5x5 的矩形結構元素。
kernel = np.ones((5, 5), np.uint8)# 3. 執行膨脹操作
# cv2.dilate(src, kernel, iterations)
# - src: 輸入圖像
# - kernel: 結構元素
# - iterations: 膨脹的次數。次數越多,膨脹效果越明顯。
dilated_image = cv2.dilate(image, kernel, iterations=1)# 4. 顯示結果
# 使用 matplotlib 顯示圖像,因為它在 Jupyter Notebook 中更方便
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(10, 5))ax1.imshow(image, cmap='gray')
ax1.set_title('Original Image')
ax1.axis('off')ax2.imshow(dilated_image, cmap='gray')
ax2.set_title('Dilated Image')
ax2.axis('off')plt.show()# 如果你想使用 OpenCV 的窗口顯示圖像
# cv2.imshow('Original Image', image)
# cv2.imshow('Dilated Image', dilated_image)
# cv2.waitKey(0)
# cv2.destroyAllWindows()

執行效果:
在這里插入圖片描述

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

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

相關文章

playwright+python UI自動化測試中實現圖片顏色和像素對比

def compare_image(expect_path, actual_path, output_path, color_diff_threshold10.0,max_diff_pixels100):# 讀取圖片img1 cv2.imread(expect_path)img2 cv2.imread(actual_path)if img1.shape ! img2.shape:img2 cv2.resize(img2, (img1.shape[1], img1.shape))# ------…

企業級AI應用,Dify集成RAGFlow知識庫保姆教程

第一部分:RAGFlow 端配置 在 Dify 能夠調用之前,確保 RAGFlow 已經就緒并提供了可訪問的 API。 步驟 1: 確保 RAGFlow 正常運行 具體可以參考:https://blog.csdn.net/qq_35354529/article/details/151149191?spm1001.2014.3001.5502 注意啟動…

daily notes[9]

文章目錄ubuntu notereferencesubuntu note Ubuntu can be written into a stick that boot ubuntu.the stick have the following effects. to install or upgrade Ubuntu include on macto experience the Ubuntu desktop without any actual operation in your OS.Disk Ut…

Java中 String、StringBuilder 和 StringBuffer 的區別?

在Java中,String、StringBuilder 和 StringBuffer 都用于處理字符串,但它們在可變性、線程安全性和性能上有顯著區別。以下是它們的對比:1. String不可變性(Immutable)String 對象一旦創建,內容不可修改。任…

SAM TTS網頁官網入口 – 在線版微軟tts在線語音合成助手

SAM TTS 是一個免費好用的在線版微軟語音合成助手,源自經典的 Windows XP 系統。它通過現代的 JavaScript 技術以在線工具的形式運行,讓用戶可以直接在線進行語音合成。SAM TTS 不僅保留了 Microsoft SAM 的標志性聲音,還新增了更多的自定義選…

2025 大數據時代值得考的證書排名前八?

在大數據時代,數據處理和分析能力愈發關鍵,考取相關證書能提升職場競爭力。接下來將為大家介紹 2025 年大數據領域值得考取的證書,從含金量、企業認可度、就業方向和薪資等方面分析,助你明晰職業發展路徑。CDA 數據分析師認證1、C…

淺談linux內存管理 的RMAP機制的作用和原理

Linux 內存管理中的 RMAP 機制深度解析反向映射(Reverse Mapping, RMAP)是 Linux 內存管理中的核心機制,它解決了大型系統中內存管理的效率和擴展性問題。本解析將從作用原理、演進歷史、數據結構和工作流程四個維度深入講解。一、RMAP 核心作…

Duolingo「多鄰國」v6.45.3 高級版

Duolingo「多鄰國」是一款著名的語言學習應用,可以借助它學習西班牙語,法語,德語,意大利語,俄語,羅馬尼亞語,葡萄牙語,土耳其語,荷蘭語,愛爾蘭語,…

【Unity Shader學習筆記】(五)Unity Shader初識

一、Shader是什么?Shader(著色器)是一段運行在GPU(圖形處理器)上的特殊程序,它用于控制渲染管線的特定階段,最終決定物體在屏幕上的最終顏色和效果。與傳統運行在CPU上的程序不同,Sh…

計算機視覺與深度學習 | 雙目立體特征提取與匹配算法綜述——理論基礎、OpenCV實踐與MATLAB實現指南

===================================================== github:https://github.com/MichaelBeechan CSDN:https://blog.csdn.net/u011344545 ===================================================== 文章目錄 引言 ?? 核心研究問題 理論框架 1. 相機幾何模型 2. 特征提…

每青春千度硒仙人掌精粹液:從日常滴飲開始,調出好氣色好體質

每天的狀態,其實是由許多細節組成的。身體不舒服、情緒波動、氣色黯淡,很可能都是體內節奏被打亂的信號。開始在日常中加入幾滴每青春千度硒精粹液,是一種小小的嘗試,慢慢發現,狀態真的在悄悄發生改變。簡單滴飲&#…

< 自用文 主機 USC 記錄:> 發現正在被攻擊 后的自救

環境: 一臺 VPS,之前文章推薦過 $1/月 OS: Ubuntu 內存:961MB CPU: 1CORE 上面都是學習 Python 時寫的應用,這些應用在 CSDN 都有原碼,只是時間久了,自用的有修復bugs,還有些功能升級。 以前是…

硬件開發1-51單片機2-按鍵、中斷

一、GPIO(General Purpose Input/Output)GPIO 是 51 單片機和外界交互最基本的方式。工作模式:輸出模式:單片機給定引腳一個電平(高電平 (5V)、低電平 (0V)),通過控制引腳實現高低電平輸出。輸入…

什么是Token?——理解自然語言處理中的基本單位

在日常生活中,我們使用手機語音助手、自動翻譯軟件和聊天機器人等智能工具,而這些技術背后都離不開對語言的精細處理。今天,我們就來聊聊“token”這一看似專業的術語,了解它在自然語言處理(NLP)中的重要作…

線程通信機制

目錄 一、主線程與子線程基礎通信 1.1 主線程向子線程傳遞數據 二、子線程向主線程返回數據 2.1 通過共享變量方式 2.2 同步塊中使用wait/notify機制 2.3 Lock和Condition實現線程通信機制 一、主線程與子線程基礎通信 1.1 主線程向子線程傳遞數據 通過構造函數傳遞參數…

硬盤 (FOREIGN) Slot:Unconfigured Bad

IBM 服務器硬盤故障,在webbios里看到有顯示(Foreign)Slot:xxxx, Unconfigured Bad的硬盤,選中該硬盤進入屬性頁面在屬性列表中找到“Media Error”和“Pred Fail Count”兩項(如果找不到請點擊【Next】翻頁&#xff09…

Vite 環境變量與全局變量詳解

目錄 一、什么是環境變量? 二、Vite 的環境變量機制 1. .env 文件 2. 定義環境變量 3. 使用環境變量 4. 內置環境變量 三、Vite 中的全局變量 1. 使用 define 配置 2. 使用 TypeScript 聲明 四、環境變量 vs 全局變量 五、常見問題與坑點 1. 為什么必須…

華為S5720交換機配置教程:開啟Web管理功能

華為S5720交換機Web登錄配置指南 華為S5720系列交換機支持通過Web界面進行管理,這是一種圖形化的操作方式,比命令行更直觀易用。以下是配置S5720交換機開啟Web登錄的詳細步驟。 一、準備工作 連接設備:使用Console線連接交換機的Console…

插入排序及希爾排序

插入排序是一種十分簡單有效的排序算法,其基本思想就是將每一個待排序的數據按照關鍵字大小插入前邊已經排好序的子序列之中。 文章目錄最基本的插入排序折半插入排序希爾排序 最基本的插入排序 插入排序的基本思想如圖可以看出,不斷選中數組中的元素&am…

碼農必備!本地調試神器act,GitHub Actions最佳拍檔

引言 在現代軟件開發實踐中,持續集成和持續部署(CI/CD)已成為不可或缺的環節。GitHub Actions 作為 GitHub 官方提供的 CI/CD 解決方案,憑借其與代碼倉庫的深度集成和豐富的生態系統,獲得了廣大開發者的青睞。然而,每次修改 CI/C…