opencv:距離變換 cv2.distanceTransform

函數 cv2.distanceTransform() 用于計算圖像中每一個非零點像素與其最近的零點像素之間的距離(Distance Transform, DT算法),輸出的是保存每一個非零點與最近零點的距離信息;圖像上越亮的點,代表了離零點的距離越遠。
distanceTransformWithLabels 可以返回距離圖和標簽圖。
distance, labels = cv.distanceTransformWithLabels(opn, cv.DIST_L1, 3, labelType=cv.DIST_LABEL_CCOMP)

cv2.distanceTransform(src, 					# 二通道二值圖,uint8 格式distanceType, 			# 距離類型maskSize[, 				# 距離變換掩碼的大小dst[, dstType]]				# 要生成的標簽數組的類型) -> dst

參數
src:這是輸入的8位單通道(通常是二值化的)源圖像。每個像素值要么是0(背景),要么是255(前景),函數會計算每個前景像素到最近背景像素的距離。

dst:這是輸出圖像,包含計算出的距離信息。它是一個8位或32位浮點型的單通道圖像,與src圖像具有相同的尺寸。每個像素值表示該像素到最近的背景像素的距離。

labels:這是輸出的二維標簽數組(離散的Voronoi圖)。它具有CV_32SC1(32位整數)類型,并且與src圖像具有相同的尺寸。每個像素值代表了最近的背景像素或背景像素組成的連通組件的標簽。

distanceType:這指定了距離類型,它定義了計算距離的方式,具體包括:

  • DIST_L1:城市街區距離,也稱為曼哈頓距離。
  • DIST_L2:歐幾里得距離。
  • DIST_C:棋盤距離,也稱為無限范數距離。

maskSize:這是距離變換所使用的掩模大小。它定義了計算距離時考慮的鄰域大小。DIST_MASK_PRECISE在此變體中不受支持。對于DIST_L1或DIST_C距離類型,參數被強制為3,因為3×3的掩模可以給出與5×5或任何更大窗口相同的距離結果。

labelType:這定義了要構建的標簽數組的類型,具體包括:

  • DIST_LABEL_CCOMP:每個連通組件的背景像素都被賦予一個唯一的標簽。
  • DIST_LABEL_PIXEL:每個背景像素都被賦予一個唯一的標簽。

通常,為了快速、粗略的距離估算DIST_L2,使用3×3掩模。為了更精確的距離估算DIST_L2,使用5×5掩模或精確算法。需要注意的是,無論是精確算法還是近似算法,它們的時間復雜度都是與像素數量線性的。

在這里插入圖片描述
在這里插入圖片描述

distanceTransformWithLabels

import cv2 as cv# 假設 opn 是經過預處理(如形態學開運算)的二值圖像
distance, labels = cv.distanceTransformWithLabels(opn, distanceType=cv.DIST_L1,maskSize=3,labelType=cv.DIST_LABEL_CCOMP
)

在這里插入圖片描述在這里插入圖片描述

經典應用

提取硬幣前景

path = "..." # 補充圖片路徑
img = cv.imread(path, cv.IMREAD_GRAYSCALE)
_ret, img2 = cv.threshold(img, 0, 255, cv.THRESH_BINARY + cv.THRESH_OTSU)
kernel = np.ones((3, 3), np.uint8)
opn = cv.morphologyEx(img2, cv.MORPH_OPEN, kernel)
distance = cv.distanceTransform(opn, cv.DIST_L2, 3)
_ret, result = cv.threshold(distance, 0.05 * distance.max(), 255, cv.THRESH_BINARY)plt.subplot(221), plt.imshow(img, cmap='gray'), plt.title('org'), plt.axis('off')
plt.subplot(222), plt.imshow(opn, cmap='gray'), plt.title('opn'), plt.axis('off')
plt.subplot(223), plt.imshow(distance, cmap='gray'), plt.title('distance'), plt.axis('off')
plt.subplot(224), plt.imshow(result, cmap='gray'), plt.title('result'), plt.axis('off')

效果類似于下圖

在這里插入圖片描述

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

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

相關文章

基于Spring Boot的黨員學習交流平臺設計與實現(LW+源碼+講解)

專注于大學生項目實戰開發,講解,畢業答疑輔導,歡迎高校老師/同行前輩交流合作?。 技術范圍:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬蟲、數據可視化、安卓app、大數據、物聯網、機器學習等設計與開發。 主要內容:…

自動駕駛兩個傳感器之間的坐標系轉換

有兩種方式可以實現兩個坐標系的轉換。 車身坐標系下一個點p_car,需要轉換到相機坐標系下,旋轉矩陣R_car2Cam,平移矩陣T_car2Cam。點p_car在相機坐標系下記p_cam. 方法1:先旋轉再平移 p_cam T_car2Cam * p_car T_car2Cam 需要注…

k8s ssl 漏洞修復

針對Kubernetes集群中SSL/TLS協議信息泄露漏洞(CVE-2016-2183)的修復,需重點修改涉及弱加密算法的組件配置。以下是具體修復步驟及驗證方法: 一、漏洞修復步驟 1. 修復etcd服務 修改配置文件 : 編輯 /etc/kubernetes/…

數字IC后端培訓教程| 芯片后端實戰項目中base layer drc violation解析

今天分享一個咱們社區IC后端訓練營學員遇到的一個經典DRC案例。這個DRC Violation的名字為PP.S.9(這里的PP就是Plus P)。這一層是屬于管子的base layer。更多關于base layer的介紹,可以查看下面這份教程。 https://alidocs.dingtalk.com/api/doc/transit?spaceId5…

從零到一學習c++(基礎篇--筑基期十一-類)

從零到一學習C(基礎篇) 作者:羨魚肘子 溫馨提示1:本篇是記錄我的學習經歷,會有不少片面的認知,萬分期待您的指正。 溫馨提示2:本篇會盡量用更加通俗的語言介紹c的基礎,用通俗的語言去…

DeepSeek技術全景解析:架構創新與行業差異化競爭力

一、DeepSeek技術體系的核心突破 架構設計:效率與性能的雙重革新 Multi-head Latent Attention (MLA):通過將注意力頭維度與隱藏層解耦,實現顯存占用降低30%的同時支持4096超長上下文窗口。深度優化的MoE架構:結合256個路由專家…

插入排序:一種簡單而直觀的排序算法

大家好!今天我們來聊聊一個簡單卻非常經典的排序算法——插入排序(Insertion Sort)。在所有的排序算法中,插入排序是最直觀的一個。 一、插入排序的基本思想 插入排序的核心思想是:將一個待排序的元素,插…

2025年校園網絡招聘會匯總

1、衛生健康行業2025屆畢業生春季校園網絡招聘會 企業數量職位數量崗位數量10020002000 訪問地址: https://www.weirenjob.com/zph/zph_wsjkxy2025jbyscjxywlzph/ 2、山東地區面向2025屆高校畢業生網絡招聘活動 企業數量職位數量崗位數量909271052434 訪問地址&a…

Windows 10 GPU STACK 0.5.1 安裝

Windows 10 GPU STACK 0.5.1 安裝 1 GPUStack 安裝1.Python安裝(3.10/11/12)2.GPUStack 下載3.生成密碼4.訪問5.設置模型下載目錄6.禁用開機自啟并重啟服務7.安裝模型8.查看安裝的進度 2.試驗場聊天測試1.對話模式 3.API Key 測試 1 GPUStack 安裝 1.Py…

【數據結構】快指針和慢指針

一、 給你單鏈表的頭結點 head ,請你找出并返回鏈表的中間結點。如果有兩個中間結點,則返回第二個中間結點。 要求:只遍歷一遍鏈表 可以使用快慢指針:fast 一次走兩步,slow 一次走一步。當 fast NULL(偶數個結點)或…

1.3 嵌入式系統的固件

嵌入式系統的固件,一般情況下的作用是: 1.硬件抽象層(HAL):固件提供了一個硬件抽象層,它將硬件的復雜性隱藏起來,為上層軟件提供了一套標準的接口。這樣,操作系統和應用程序不需要直接與硬件打交…

中國工業互聯網研究院:人工智能大模型年度發展趨勢報告

當前,以大模型為代表的人工智能正快速演進,激發全球科技之變、產業之變、時代之變,人工智能發展迎來新高潮。隨著大模型推理、多模態生成、智能體等創新技術的發展,大模型賦能千行百業將進一步提速。中國工業互聯網研究院全方位剖…

【cv】vs2022配置opencv

release下配置包含目錄和庫目錄 E:\sdk\sdk_cuda12.3\opencv490\include E:\sdk\sdk_cuda12.3\opencv490\include\opencv2 E:\sdk\sdk_cuda12.3\opencv490\lib release下配置包含鏈接器輸入的依附依賴項 opencv_world490.lib release編譯文件夾下需手動復制opencv_world49…

Python Pandas庫使用指南:從入門到精通

1. 引言 Pandas 是 Python 中用于數據處理和分析的核心庫之一。它提供了高效的數據結構(如 DataFrame 和 Series),能夠輕松處理結構化數據,支持數據清洗、過濾、聚合、合并等操作。Pandas 在數據分析、機器學習和科學計算領域中被廣泛使用。 本文將詳細介紹 Pandas 的基本…

Visual Studio中打開多個項目

1) 找到解決方案窗口 2) 右鍵添加→ 選擇現有項目 3) 選擇.vcxproj文件打開即可

react路由總結

目錄 一、腳手架基礎語法(16~17) 1.1、hello react 1.2、組件樣式隔離(樣式模塊化) 1.3、react插件 二、React Router v5 2.1、react-router-dom相關API 2.1.1、內置組件 2.1.1.1、BrowserRouter 2.1.1.2、HashRouter 2.1.1.3、Route 2.1.1.4、Redirect 2.1.1.5、L…

內外網隔離文件傳輸解決方案|系統與釘釘集成+等保合規,安全提升70%

一、背景與痛點 在內外網隔離的企業網絡環境中,員工與外部協作伙伴(如釘釘用戶)的文件傳輸面臨以下挑戰: 1. **安全性風險**:內外網直連可能導致病毒傳播、數據泄露。 2. **操作繁瑣**:傳統方式需頻繁切…

多線程篇學習面試

多線程 1.樂觀鎖、CAS思想 java樂觀鎖機制: ? 樂觀鎖體現的是悲觀鎖的反面。它是一種積極的思想,它總是認為數據是不會被修改的,所以是不會對數據上鎖的。但是樂觀鎖在更新的時候會去判斷數據是否被更新過。樂觀鎖的實現方案一般有兩種&a…

云服務器和物理服務器該如何選擇

隨著互聯網的快速發展,企業大多都會選擇云服務器和物理服務器進行使用,那么對于云服務器和物理服務器兩者之間該如何進行選擇呢? 云服務器可以為用戶和企業提供網站處理中等到高流量所需要的一切,云服務器中的高可用能性功能&…

將產品照片(form.productPhotos)轉為 JSON 字符串發送給后端

文章目錄 1. 前端 form.productPhotos 的當前處理a. 組件綁定b. 當前發送邏輯 2. 如何將 form.productPhotos 轉為 JSON 字符串發送給后端a. 修改前端 save() 方法b. 確保 esave API 支持接收字符串 基于你提供的 identify-form.vue 代碼,我將分析如何將產品照片&a…