Python----計算機視覺處理(Opencv:形態學變換)

一、形態學變化

????????形態學變換(Morphological Transformations)是一種基于形狀的圖像處理技術,主要處理的對象為二值化圖像。

????????形態學變換有兩個輸入和一個輸出:輸入為原始圖像和核(即結構化元素),輸出為經過形態學變換后的圖像。

????????其基本操作包括腐蝕(Erosion)和膨脹(Dilation),這兩種操作互為反向過程,分別對圖像中的亮度值產生不同的影響。

二、核

????????核,或稱結構化元素,是用于形態學變換的一個小的二值圖像,通常呈現為簡單的幾何形狀,例如矩形、橢圓形或十字形等。結構化元素的大小和形狀直接影響腐蝕和膨脹操作的效果。

2.1、矩形

2.2、橢圓形

2.3、十字形

三、腐蝕

????????腐蝕操作就是使用核在原圖(二值化圖)上進行從左到右、從上到下的滑動(也就是從圖像的左上角開 始,滑動到圖像的右下角)。在滑動過程中,令核值為1的區域與被核覆蓋的對應區域進行相乘,得到其 最小值,該最小值就是卷積核覆蓋區域的中心像素點的新像素值,接著繼續滑動。由于操作圖像為二值 圖,所以不是黑就是白,這就意味著,在被核值為1覆蓋的區域內,只要有黑色(像素值為0),那么該 區域的中心像素點必定為黑色(0)。這樣做的結果就是會將二值化圖像中的白色部分盡可能的壓縮,如 下圖所示,該圖經過腐蝕之后,“變瘦”了。

?導入模塊

import cv2

?讀取圖片

img=cv2.imread('img.png')

?灰度化

img_gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

?二值化

ret,img_threshold=cv2.threshold(img_gray,127,255,cv2.THRESH_BINARY)

?創建核

kernel=cv2.getStructuringElement(cv2.MORPH_CROSS,(15,15))

?腐蝕

img_erode=cv2.erode(img_threshold,kernel)

?顯示圖片

cv2.imshow('img_gray',img_gray)
cv2.imshow('img_erode',img_erode)
cv2.waitKey(0)

?完整代碼

import cv2  # 導入OpenCV庫  # 讀取圖像  
img = cv2.imread('img.png')  # 將圖像轉換為灰度圖  
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)  # 對灰度圖像應用閾值處理,以獲得二值圖像  
# ret: 用于輸出閾值值,img_threshold: 閾值處理后的圖像  
ret, img_threshold = cv2.threshold(img_gray, 127, 255, cv2.THRESH_BINARY)  # 創建一個15x15的十字形結構元素(腐蝕操作所用的卷積核)  
kernel = cv2.getStructuringElement(cv2.MORPH_CROSS, (15, 15))  # 對閾值處理后的圖像進行腐蝕操作  
img_erode = cv2.erode(img_threshold, kernel)  # 顯示腐蝕處理后的圖像  
cv2.imshow('img_erode', img_erode)  # 等待用戶按鍵后關閉窗口  
cv2.waitKey(0)  

四、膨脹

????????膨脹與腐蝕剛好相反,膨脹操作就是使用核在原圖(二值化圖)上進行從左到右、從上到下的滑動(也 就是從圖像的左上角開始,滑動到圖像的右下角),在滑動過程中,令核值為1的區域與被核覆蓋的對應 區域進行相乘,得到其最大值,該最大值就是核覆蓋區域的中心像素點的新像素值,接著繼續滑動。由 于操作圖像為二值圖,所以不是黑就是白,這就意味著,在卷積核覆蓋的區域內,只要有白色(像素值 為255),那么該區域的中心像素點必定為白色(255)。這樣做的結果就是會將二值化圖像中的白色部 分盡可能的擴張,如下圖所示,該圖經過腐蝕之后,“變胖”了。

導入模塊

import cv2

?讀取圖片

img=cv2.imread('img.png')

?灰度化

img_gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

?二值化

ret,img_threshold=cv2.threshold(img_gray,127,255,cv2.THRESH_BINARY)

?創建核

kernel=cv2.getStructuringElement(cv2.MORPH_CROSS,(15,15))

?膨脹

img_dilate=cv2.dilate(img_threshold,kernel)

?顯示圖片

cv2.imshow('img_dilate',img_dilate)
cv2.waitKey(0)

完整代碼?

import cv2  # 導入OpenCV庫  # 讀取圖像  
img = cv2.imread('img.png')  # 將圖像轉換為灰度圖  
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)  # 對灰度圖像應用閾值處理,以獲得二值圖像  
# ret: 用于輸出閾值值,img_threshold: 閾值處理后的圖像  
ret, img_threshold = cv2.threshold(img_gray, 127, 255, cv2.THRESH_BINARY)  # 創建一個15x15的十字形結構元素(膨脹操作所用的卷積核)  
kernel = cv2.getStructuringElement(cv2.MORPH_CROSS, (15, 15))  # 對閾值處理后的圖像進行膨脹操作  
# 膨脹會增強圖像中亮區域的大小  
img_dilate = cv2.dilate(img_threshold, kernel)  # 顯示膨脹處理后的圖像  
cv2.imshow('img_dilate', img_dilate)  # 等待用戶按鍵后關閉窗口  
cv2.waitKey(0)  

五、庫函數

5.1、getStructuringElement()

cv.getStructuringElement(	shape, ksize[, anchor]	) ->	retval
方法描述
shape可以是?MorphShapes?之一
ksize結構元素的大小。
anchor元素內的錨點位置。默認值(?1,?1)表示錨點位于中心。請注意,只有十字形元素的形狀取決于錨點位置。在其他情況下,錨點只是調節形態作的結果偏移了多少
MorphShapes
MORPH_RECT
Python:cv.MORPH_RECT

矩形結構元素:

MORPH_CROSS
Python:cv.MORPH_CROSS

十字形結構元件:

MORPH_ELLIPSE
Python:cv.MORPH_ELLIPSE

橢圓結構元素,即內接到矩形 Rect(0, 0, esize.width, esize.height) 中的填充橢圓

5.2、erode()

cv.erode(	src, kernel[, dst[, anchor[, iterations[, borderType[, borderValue]]]]]	) ->	dst
方法描述
src輸入圖像;通道數可以是任意的,但深度應該是 CV_8U、 CV_16U、 CV_16S、 CV_32F 或 CV_64F 之一。
dst輸出圖像的大小和類型與 src 相同。
kernel用于侵蝕的結構元件;如果 ,則使用矩形結構元素。可以使用?getStructuringElement?創建 Kernel。element=Mat()3 x 3
anchor錨點在元素中的位置;默認值 (-1, -1) 表示錨點位于元素中心。
iterations應用 腐蝕的次數。
borderType像素外插方法,請參閱?BorderTypes。不支持BORDER_WRAP。
borderValueborder 值(如果邊界為常量)
BorderTypes
BORDER_CONSTANT
Python:cv.BORDER_CONSTANT

iiiiii|abcdefgh|iiiiiii并指定一些i

BORDER_REPLICATE
Python:cv.BORDER_REPLICATE

aaaaaa|abcdefgh|hhhhhhh

BORDER_REFLECT
Python:cv.BORDER_REFLECT

fedcba|abcdefgh|hgfedcb

BORDER_REFLECT_101
Python:cv.BORDER_REFLECT_101

gfedcb|abcdefgh|gfedcba

BORDER_TRANSPARENT
Python:cv.BORDER_TRANSPARENT

uvwxyz|abcdefgh|ijklmno- 將離群值視為透明值。

BORDER_REFLECT101
Python:cv.BORDER_REFLECT101

與 BORDER_REFLECT_101 相同

BORDER_DEFAULT
Python:cv.BORDER_DEFAULT

與 BORDER_REFLECT_101 相同

BORDER_ISOLATED
Python:cv.BORDER_ISOLATED

插值限制在 ROI 邊界內。

5.3、?dilate()

cv.dilate(	src, kernel[, dst[, anchor[, iterations[, borderType[, borderValue]]]]]	) ->	dst
方法描述
src輸入圖像;通道數可以是任意的,但深度應該是 CV_8U、 CV_16U、 CV_16S、 CV_32F 或 CV_64F 之一。
dst輸出圖像的大小和類型與 src 相同。
kernel用于擴張的結構元件;如果 element=Mat(),則使用 3 x 3 矩形結構元素。可以使用?getStructuringElement?創建 Kernel
anchor錨點在元素中的位置;默認值 (-1, -1) 表示錨點位于元素中心。
iterations應用擴張的次數。
borderType像素外插方法,請參閱?BorderTypes。不支持BORDER_WRAP。
borderValueborder 值(如果邊界為常量)
BorderTypes
BORDER_CONSTANT
Python:cv.BORDER_CONSTANT

iiiiii|abcdefgh|iiiiiii并指定一些i

BORDER_REPLICATE
Python:cv.BORDER_REPLICATE

aaaaaa|abcdefgh|hhhhhhh

BORDER_REFLECT
Python:cv.BORDER_REFLECT

fedcba|abcdefgh|hgfedcb

BORDER_REFLECT_101
Python:cv.BORDER_REFLECT_101

gfedcb|abcdefgh|gfedcba

BORDER_TRANSPARENT
Python:cv.BORDER_TRANSPARENT

uvwxyz|abcdefgh|ijklmno- 將離群值視為透明值。

BORDER_REFLECT101
Python:cv.BORDER_REFLECT101

與 BORDER_REFLECT_101 相同

BORDER_DEFAULT
Python:cv.BORDER_DEFAULT

與 BORDER_REFLECT_101 相同

BORDER_ISOLATED
Python:cv.BORDER_ISOLATED

插值限制在 ROI 邊界內。

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

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

相關文章

對于memset(b, 1, sizeof b)賦值為16843009情況

memset(b, 1, sizeof b); 的行為看起來可能不符合預期,這是因為 memset 的工作方式和數據類型之間的差異導致的。下面詳細解釋這個問題。 1. memset 的作用 memset 是 C/C 中的一個標準庫函數,用于將一段內存區域的值設置為指定的字節值。它的函數原型如…

【最新版】智慧小區物業管理小程序源碼+uniapp全開源

一.系統介紹 智慧小區物業管理小程序,包含小區物業繳費、房產管理、在線報修、業主活動報名、在線商城等功能。為物業量身打造的智慧小區運營管理系統,貼合物業工作場景,輕松提高物業費用收繳率,更有功能模塊個性化組合,助力物業節約成本高效運營。 二.搭建環境 系統環…

C++模板進階

目錄 非類型模板參數 類模板的特化 分類 函數模板的特化 模板分離編譯 問題 解決方法 1)不對模板定義進行分離或對模板進行特例化; 2)將聲明和定義放在同一個文件 總結 關于C模板的使用在《C類和對象》中有介紹,本篇博客…

Ubuntu togo系統讀寫性能與原生系統測試

我前面把一個Ubuntu環境拷貝到了一個10Gbps的硬盤盒制作了一個Ubuntu togo的系統,帖子在這里,這篇文章主要用于測試使用Ubuntu togo的系統和原生系統的性能差異。 以下是測試Ubuntu togo系統與原系統性能差異的具體方案,結合移動硬盤特性及參…

【css酷炫效果】實現魚群游動動態效果

【css酷炫效果】實現小魚游動動態效果 緣創作背景css代碼創建div容器引入jquery引入魚群js完整代碼效果圖成品資源下載鏈接:點擊下載 緣 在開發系統功能的時候,無意間看到了小魚游動特效,感覺很有意思,就在網上找了相關教程,分享給大家。 創作背景 剛看到csdn出活動了…

停車場停車位數據集,標注停車位上是否有車,平均正確識別率99.5%,支持yolov5-11, coco json,darknet,xml格式標注

停車場停車位數據集,標注停車位上是否有車,平均正確識別率98.0%,支持yolov5-11, coco json,darknet,xml格式標注 數據集-識別停車場所有車輛的數據集 數據集分割 一共184張圖片 訓練組 89&am…

結合基于標簽置信度的特征選擇方法用于部分多標簽學習-簡介版

假設 部分多標簽學習(PML)假設:假設樣本的標簽集合中存在偽正標簽,即某些標簽可能是錯誤的。目標是從候選標簽集中識別出真實標簽。特征與標簽的關系假設:假設不同的標簽對應的特征子空間可能是不同的,而不…

Lora微LLAMA模型實戰

引言 本文介紹如何復現Alpaca-lora,即基于alpaca數據集用lora方法微調Llama模型。 環境準備 實驗環境用的是lanyun,新用戶點擊注冊可以送算力。 下載huggingface上的模型是一個令人頭疼的問題,但在lanyun上可以通過在終端運行source /etc…

Maven常見問題匯總

Maven刷新,本地倉庫無法更新 現象 This failure was cached in the local repository and resolution is not reattempted until the update interval of aliyunmaven has elapsed or updates are forced原因 因為上一次嘗試下載,發現對應的倉庫沒有這個maven配置…

什么是站群服務器?站群服務器應該怎么選?

站群服務器是專門用于托管和管理多個網站的服務器。通常用于SEO優化、內容分發、廣告推廣等場景,用戶可以通過一個服務器管理多個站點,提升效率并降低成本。選擇站群服務器時,需根據業務需求、性能要求、IP資源等因素進行綜合考慮。 什么是站…

分享一個項目中遇到的一個算法題

需求背景: 需求是用戶要創建一個任務計劃在未來執行,要求在創建任務計劃的時候判斷選擇的時間是否符合要求,否則不允許創建,創建的任務類型有兩種,一種是單次,任務只執行一次;另一種是周期&…

【LInux進程六】命令行參數和環境變量

【LInux進程六】命令行參數和環境變量 1.main函數的兩個參數2.利用main函數實現一個簡單的計算器3.環境變量之一:PATH4.修改PATH5.在命令行解釋器bash中查看所有環境變量6.用自己寫的程序查看環境變量7.main函數的第三個參數8.本地的環境變量和環境變量9.環境變量具…

時間軸版本-2.0

文章簡述 這是本人自己封裝的時間軸2.0版本的代碼,用到了TypeScriptJavaScript 這篇文章只有代碼和具體的使用方式,如果想看具體的講解可以參考本人寫的時間軸1.0版本的,在1.0版本中可能計算時間線的邏輯略有不同,但是大致的計算…

大語言模型的壓縮技術

盡管人們對越來越大的語言模型一直很感興趣,但MistralAI 向我們表明,規模只是相對而言的,而對邊緣計算日益增長的興趣促使我們使用小型語言獲得不錯的結果。壓縮技術提供了一種替代方法。在本文中,我將解釋這些技術,并…

大華HTTP協議在智聯視頻超融合平臺中的接入方法

一. 大華HTTP協議介紹 大華HTTP協議是大華股份(Dahua Technology)為其安防監控設備開發的一套基于HTTP/HTTPS的通信協議,主要用于設備與客戶端(如PC、手機、服務器)之間的數據交互。該協議支持設備管理、視頻流獲取、…

Linux內核實時機制28 - RT調度器11 - RT 組調度

Linux內核實時機制28 - RT調度器11 - RT 組調度 相關數據結構 內核中通過static int sched_rt_runtime_exceeded(struct rt_rq *rt_rq)函數來判斷實時任務運行時間是否超出帶寬限制,判斷這個運行隊列rt_rq的運行時間是否超過了額定的運行時間。而“運行時間”和“額定時間”都…

java,poi,提取ppt文件中的文字內容

注意&#xff0c;不涉及圖片處理。 先上pom依賴&#xff1a; <!-- 處理PPTX文件 --><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>5.2.3</version></dependency><!--…

7、vue3做了什么

大佬認為有何優點&#xff1a; 組合式api----邏輯集中、對ts有更好的支持RFC–開放了一個討論機制&#xff0c;可以看到每一個api的提案&#xff0c;方便源碼維護&#xff0c;功能擴展&#xff0c;大家一起討論 官方rfc響應式獨立&#xff0c;new Proxy&#xff0c;天生自帶來…

多人在線聊天系統,創建群,視頻,語音,自帶帶授權碼

多人在線聊天系統&#xff0c;創建群&#xff0c;視頻&#xff0c;語音 帶授權碼&#xff0c;授權碼限制 10 個網站&#xff0c;需要下載研究吧 在線聊天&#xff0c;創建群&#xff0c;表情&#xff0c;圖片&#xff0c;文件&#xff0c;視頻&#xff0c;語音&#xff0c;自…

數據結構概覽

關鍵點&#xff1a; 數據結構是組織和存儲數據的方式&#xff0c;幫助高效訪問和操作數據。常見類型包括數組、鏈表、棧、隊列、樹和圖&#xff0c;每種都有特定用途。代碼示例和實際應用場景將幫助初學者理解這些概念。 什么是數據結構&#xff1f; 數據結構就像你整理書架或…