markdown
#說明
這邊當作一個小筆記,參考別人的程式中影像處理的幾個常見應用,去除影像中的躁點常常看見別人使用膨脹和腐蝕的技巧,在python 應用 opencv 的套件,以下針對我在程式裡遇到的 幾個 function 簡單說明。
#操作流程
##Code
```
def remove_text(img):
origin = img.copy()
cv2.namedWindow('result', cv2.WINDOW_NORMAL)
cv2.resizeWindow("result", 640, 480)
cv2.imshow("result", origin)
# 按下任意鍵則關閉所有視窗
cv2.waitKey(0)
cv2.destroyAllWindows()
dilated = cv2.dilate(img, cv2.getStructuringElement(cv2.MORPH_RECT, (31,31))) # 膨脹白色範圍變大
contours, hierarchy = cv2.findContours(dilated, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) # 找邊緣
text_cnts = []
for i in range(len(contours)):
mask = np.zeros_like(origin)
cv2.drawContours(mask, contours, i, 255, -1)
(y, x) = np.where(mask == 255)#有被 mask 標記起來的都列進去 y 和 x
(topy, topx) = (np.min(y), np.min(x)) #把有 mask 為白色的找出最大最小,代表四個點
(bottomy, bottomx) = (np.max(y), np.max(x))
crop = origin[topy:bottomy + 1, topx:bottomx + 1]
crop = cv2.erode(crop, cv2.getStructuringElement(cv2.MORPH_RECT, (31, 31)))
if sum(crop.ravel()) == 0:
text_cnts.append(i)
for i in text_cnts:
k=cv2.drawContours(origin, contours, i, (100,100
, 0), -1)
# 顯示圖片
cv2.namedWindow('k', cv2.WINDOW_NORMAL)
cv2.resizeWindow("k", 640, 480)
cv2.imshow("k", k)
# 按下任意鍵則關閉所有視窗
cv2.waitKey(0)
cv2.destroyAllWindows()
return k
```
##說明
##參考
- OpenCV 形態學處理
- OpenCV 形態學處理小林網誌說明
- 膨脹和腐蝕講解
- 高級形態學處理
##關鍵字
- Python 形態學
- Python 閉運算
- Python 膨脹腐蝕
留言
張貼留言