日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

【OpenCV-Python】-图像形态学转化

發(fā)布時(shí)間:2024/9/5 编程问答 42 如意码农
生活随笔 收集整理的這篇文章主要介紹了 【OpenCV-Python】-图像形态学转化 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

原文為段立輝翻譯,感謝Linux公社
此文檔為自學(xué)轉(zhuǎn)述,如有侵權(quán)請(qǐng)聯(lián)系本人。

目標(biāo):

• 學(xué)習(xí)不同的形態(tài)學(xué)操作,例如腐蝕,膨脹,開(kāi)運(yùn)算,閉運(yùn)算等

• 學(xué)習(xí)的函數(shù)有:cv2.erode(),cv2.dilate(),cv2.morphologyEx() 等

形態(tài)學(xué)轉(zhuǎn)換原理:一般情況下對(duì)二值化圖像進(jìn)行操作。需要兩個(gè)參數(shù),一個(gè)是原始圖像,第二個(gè)被稱(chēng)為結(jié)構(gòu)化元素或者核,它是用來(lái)決定操作的性質(zhì)的。基本操作為腐蝕和膨脹,他們的變體構(gòu)成了開(kāi)運(yùn)算,閉運(yùn)算,梯度等。

1、腐蝕

把前景物體的邊界腐蝕掉,但是前景仍然是白色的。卷積核沿著圖像滑動(dòng),如果與卷積核對(duì)應(yīng)的原圖像的所有像素值都是1,那么中心元素就保持原來(lái)的像素值,否則就變?yōu)榱恪8鶕?jù)卷積核的大小靠近前景的所有像素都會(huì)被腐蝕掉(變?yōu)?),所以前景物體會(huì)變小,整幅圖像的白色區(qū)域會(huì)減少。這對(duì)于去除白噪音很有用,也可以用來(lái)斷開(kāi)兩個(gè)連在一塊的物體。

erosion = cv2.erode(img, kernel, iterations=1)

2、膨脹

與腐蝕相反,與卷積核對(duì)應(yīng)的原圖像的像素值中只要有一個(gè)是1,中心元素的像素值就是1。所以這個(gè)操作會(huì)增加圖像中白色區(qū)域(前景)。一般在去噪音時(shí)先腐蝕再膨脹,因?yàn)楦g再去掉白噪音的同時(shí),也會(huì)使前景對(duì)象變小,所以我們?cè)倥蛎洝_@時(shí)噪音已經(jīng)被去除,不會(huì)再回來(lái)了,但是前景還在并會(huì)增加,膨脹也可以用來(lái)連接兩個(gè)分開(kāi)的物體。

dilation = cv2.dilate(img, kernel, iterations=1)

3、開(kāi)運(yùn)算

先進(jìn)行腐蝕再進(jìn)行膨脹就叫做開(kāi)運(yùn)算。被用來(lái)去除噪音,函數(shù)可以使用cv2.morphotogyEx()

opening = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)

4、閉運(yùn)算

先膨脹再腐蝕。被用來(lái)填充前景物體中的小洞,或者前景上的小黑點(diǎn)。

closing = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel)

5、形態(tài)學(xué)梯度

其實(shí)就是一幅圖像膨脹與腐蝕的差別。結(jié)果看上去就像前景物體的輪廓。

gradient = cv2.morphologyEx(img, cv2.MORPH_GRADIENT, kernel)

6、禮帽

原始圖像與進(jìn)行開(kāi)運(yùn)算之后得到的圖像的差。

tophat = cv2.morphologyEx(img, cv2.MORPH_TOPHAT, kernel)

7、黑帽

進(jìn)行閉運(yùn)算之后得到的圖像與原始圖像的差。

blackhat = cv2.morphologyEx(img, cv2.MORPH_BLACKHAT, kernel)
import cv2
import numpy as np img = cv2.imread('./opencv_learn/image3.png',0) kernel = np.ones((5,5),np.uint8)
# 腐蝕
erosion = cv2.erode(img, kernel, iterations=1)
# 膨脹
dilation = cv2.dilate(img, kernel, iterations=1)
# 開(kāi)運(yùn)算,先腐蝕在膨脹
opening = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)
# 閉運(yùn)算,先膨脹在腐蝕
closing = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel)
# 形態(tài)學(xué)梯度,腐蝕和膨脹的差別
gradient = cv2.morphologyEx(img, cv2.MORPH_GRADIENT, kernel)
# 禮貌,開(kāi)運(yùn)算后與原圖的差
tophat = cv2.morphologyEx(img, cv2.MORPH_TOPHAT, kernel)
# 黑帽, 閉運(yùn)算后與原圖的差
blackhat = cv2.morphologyEx(img, cv2.MORPH_BLACKHAT, kernel) while(1):
cv2.imshow('img',img)
cv2.imshow('erosion',erosion)
cv2.imshow('dilation', dilation)
cv2.imshow('opening', opening)
cv2.imshow('closing',closing)
cv2.imshow('gradient',gradient)
cv2.imshow('tophat', tophat)
cv2.imshow('blackhat', blackhat)
k = cv2.waitKey(1)
if k == ord('q'):
break cv2.destroyAllWindows()

結(jié)構(gòu)化元素

之前的例子都是使用numpy構(gòu)建了結(jié)構(gòu)化元素,但是是正方形的,若需要構(gòu)建橢圓或者圓形的核,可以使用OpenCV提供的函數(shù)cv2.getStructuringElemenet(),只需要告訴它你需要的核的形狀和大小。

總結(jié)

以上是生活随笔為你收集整理的【OpenCV-Python】-图像形态学转化的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。