import cv2 as cv
import numpy as np
"""
開(kāi)運(yùn)算:先進(jìn)性腐蝕再進(jìn)行膨脹就叫做開(kāi)運(yùn)算,它被用來(lái)去除噪聲。
閉運(yùn)算:先膨脹再腐蝕。它經(jīng)常被用來(lái)填充前景物體中的小洞,或者前景物體上的小黑點(diǎn)。
這里我們用到的函數(shù)是 cv2.morphologyEx()。
開(kāi)閉操作作用:
1. 去除小的干擾塊-開(kāi)操作
2. 填充閉合區(qū)間-閉操作
3. 水平或垂直線(xiàn)提取,調(diào)整kernel的row,col值差異。
比如:采用開(kāi)操作,kernel為(1, 15),提取垂直線(xiàn),kernel為(15, 1),提取水平線(xiàn),
"""
"""
其他形態(tài)學(xué)操作:
頂帽:原圖像與開(kāi)操作之間的差值圖像
黑帽:比操作與原圖像直接的差值圖像
形態(tài)學(xué)梯度:其實(shí)就是一幅圖像膨脹與腐蝕的差別。 結(jié)果看上去就像前景物體的輪廓
基本梯度:膨脹后圖像減去腐蝕后圖像得到的差值圖像。
內(nèi)部梯度:用原圖減去腐蝕圖像得到的差值圖像。
外部梯度:膨脹后圖像減去原圖像得到的差值圖像。
"""
def open_demo(image):
print(image.shape)
gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)
ret, binary = cv.threshold(gray, 0, 255, cv.THRESH_BINARY | cv.THRESH_OTSU)
cv.imshow("binary", binary)
"""
在前面的例子中我們使用Numpy構(gòu)建了結(jié)構(gòu)化元素,它是正方形的。
但有時(shí)我們需要構(gòu)建一個(gè)橢圓形 / 圓形的核。為了實(shí)現(xiàn)這種要求,提供了OpenCV
函數(shù)cv2.getStructuringElement()。你只需要告訴他你需要的核的形狀和大小。
"""
kernel = cv.getStructuringElement(cv.MORPH_RECT, (5, 5))
dst = cv.morphologyEx(binary, cv.MORPH_OPEN, kernel=kernel)
cv.imshow("open_demo", dst)
def close_demo(image):
print(image.shape)
gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)
ret, binary = cv.threshold(gray, 0, 255, cv.THRESH_BINARY | cv.THRESH_OTSU)
cv.imshow("binary", binary)
kernel = cv.getStructuringElement(cv.MORPH_RECT, (5, 5))
dst = cv.morphologyEx(binary, cv.MORPH_CLOSE, kernel=kernel)
cv.imshow("open_demo", dst)
def other_morphology_demo(image):
gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)
kernel = cv.getStructuringElement(cv.MORPH_RECT, (5, 5))
dst = cv.morphologyEx(gray, cv.MORPH_BLACKHAT, kernel=kernel)
cimg = np.array(gray.shape, np.uint8)
cimg = 100
dst = cv.add(dst, cimg)
cv.imshow("top_hat_demo", dst)
def main():
src = cv.imread("lena.jpg")
# open_demo(src)
# close_demo(src)
# # 彩色圖像腐蝕,膨脹
# img = cv.imread("lena.jpg")
# cv.imshow("img", img)
# kernel = cv.getStructuringElement(cv.MORPH_RECT, (5, 5))
# # dst = cv.dilate(img, kernel=kernel)
# dst = cv.erode(img, kernel=kernel)
# cv.imshow("dilate", dst)
# tophat, blackhat
top_hat_demo(src)
cv.waitKey(0) # 等有鍵輸入或者1000ms后自動(dòng)將窗口消除,0表示只用鍵輸入結(jié)束窗口
cv.destroyAllWindows() # 關(guān)閉所有窗口
if __name__ == '__main__':
main()
24.開(kāi)閉操作
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
相關(guān)閱讀更多精彩內(nèi)容
- 在《《蘇東坡傳》 | 《一》母親,我長(zhǎng)大之后若做范滂這樣的人您愿意嗎?”》講述了蘇軾的母親陪伴孩子一起學(xué)習(xí),那么父...
- 小小“開(kāi)心果” 筱雅/文 隨著春節(jié)的已近尾聲,我家的小開(kāi)心果也隨著他的父母返回廣州了。 今年的春節(jié),注定了會(huì)有與眾...
- Linux分區(qū) /boot分區(qū):/boot分區(qū)是操作系統(tǒng)的內(nèi)核及在引導(dǎo)過(guò)程中使用的文件(現(xiàn)在可以不用劃分這個(gè)區(qū)了)...