目錄
1. 簡述
2. 用腐蝕和膨脹實現開運算
2.1 代碼示例
2.2 運行結果
3. 開運算接口
3.1 參數詳解
3.2 代碼示例
3.3 運行結果
4. 開運算應用場景
5. 注意事項
6. 總結
相關閱讀
OpenCV:圖像的腐蝕與膨脹-CSDN博客
OpenCV:閉運算-CSDN博客
1. 簡述
簡而言之:開運算 = 腐蝕 + 膨脹
開運算?是一種形態學操作,通常用于去除圖像中的小噪點,同時保留較大的前景物體。
它的操作順序是:
- 先對圖像進行 腐蝕,去除細小的噪點和瑕疵。
- 再進行 膨脹,恢復被腐蝕的前景物體形狀。
開運算的主要作用是:
- 去除噪聲(尤其是白色背景下的黑色小物體)。
- 平滑前景物體的邊緣。
開運算的數學表達式為:
其中:
- A 是輸入圖像。
- B?是卷積核。
- ? 表示腐蝕操作。
- ⊕ 表示膨脹操作。
2. 用腐蝕和膨脹實現開運算
2.1 代碼示例
import cv2
import numpy as npimage = cv2.imread('D:\\resource\\filter\\q3.jpg')# 卷積核
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (7, 7))# 腐蝕操作
result1 = cv2.erode(image, kernel, iterations=1)# 膨脹操作
result2 = cv2.dilate(result1, kernel, iterations=1)# 顯示原始圖像、開運算(腐蝕 + 膨脹)圖像
cv2.imshow('image', image)
cv2.imshow('result2', result2)cv2.waitKey(0)
cv2.destroyAllWindows()
2.2 運行結果
從左到右:
- 原始黑底白字圖像,帶一些白色的噪點。
- 圖像腐蝕和膨脹之后的結果,白色噪點消失。?
3. 開運算接口
在 OpenCV 中,開運算由函數 cv2.morphologyEx() 實現,其關鍵參數如下:
cv2.morphologyEx(src, op, kernel, dst=None, anchor=(-1, -1), iterations=1, borderType=cv2.BORDER_CONSTANT, borderValue=0)
3.1 參數詳解
- src:輸入圖像。通常是二值化圖像或灰度圖像。
- op:操作類型,開運算的標識符為 cv2.MORPH_OPEN。
- kernel:結構元素(卷積核)。決定形態學操作的鄰域范圍和形狀。可以使用 cv2.getStructuringElement() 創建。
- dst:輸出圖像。默認為 None。
- anchor:結構元素的錨點,默認為 (-1, -1),即以核的中心為錨點。
- iterations:操作的迭代次數,默認為 1。
- borderType:邊界模式,定義圖像邊界的填充方式,常用 cv2.BORDER_CONSTANT。
- borderValue:邊界值,僅在 borderType 為 cv2.BORDER_CONSTANT 時使用。
常用的參數為前3個:
cv2.morphologyEx(image, cv2.MORPH_OPEN, kernel)
3.2 代碼示例
import cv2
import numpy as npimage = cv2.imread('D:\\resource\\filter\\q3.jpg')# 卷積核
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (7, 7))# 腐蝕操作
#result1 = cv2.erode(image, kernel, iterations=1)# 膨脹操作
#result2 = cv2.dilate(result1, kernel, iterations=1)# 開運算
result2 = cv2.morphologyEx(image, cv2.MORPH_OPEN, kernel)# 顯示原始圖像、開運算(腐蝕 + 膨脹)圖像
cv2.imshow('image', image)
cv2.imshow('result2', result2)cv2.waitKey(0)
cv2.destroyAllWindows()
3.3 運行結果
結果與2.2一致。
4. 開運算應用場景
- 去除小噪點:在二值化圖像中,小的孤立噪聲點可以通過開運算清除。
- 提取連通區域:對于連通區域的檢測,開運算可以去掉孤立的小物體,僅保留目標區域。
- 平滑邊緣:通過開運算,前景物體的邊緣可以更加平滑。
5. 注意事項
- 核的大小與形狀:卷積核的大小直接影響結果。核過大會過度去除圖像細節,核過小則可能無法有效去除噪聲。
- 輸入圖像類型:開運算適用于二值化或灰度圖像,對于彩色圖像需先轉換。
- 多次操作:對于復雜噪聲,可能需要多次開運算,或調整核的大小與形狀。
?6. 總結
開運算是圖像形態學中的基本操作,用于去除小噪點、平滑邊緣等。OpenCV 提供了功能強大的接口 cv2.morphologyEx(),可以靈活實現開運算及其他形態學操作。通過選擇合適的卷積核,可以在實際項目中輕松應對各種圖像處理問題。