初學opencv/形態學邊緣檢測
阿新 • • 發佈:2019-01-04
形態學檢測邊緣的原理很簡單,在膨脹時,影象中的物體會想周圍“擴張”;腐蝕時,影象中的物體會“收縮”。比較這兩幅影象,由於其變化的區域只發生在邊緣。所以這時將兩幅影象相減,得到的就是影象中物體的邊緣。
#coding:utf-8
"""
opencv形態學邊緣檢測
"""
import cv2
import numpy as np
import matplotlib.pyplot as plt
#讀取灰度圖
img = cv2.imread('images/figure_2.png',0)
cv2.imshow('original img',img)
#定義一個3*3的十字形結構元素
kernel = cv2.getStructuringElement(cv2.MORPH_RECT,(3 ,3))
#影象膨脹
dilated = cv2.dilate(img,kernel)
#影象腐蝕
eroded = cv2.erode(img,kernel)
#邊緣檢測
edge = cv2.absdiff(dilated,eroded)
cv2.imshow('edge image',edge)
#cv2.threshold將影象二值化,畫素高於閾值40時,255白色,否則,黑色
retval,binary_result = cv2.threshold(edge,40,255,cv2.THRESH_BINARY)
cv2.imshow('binary edge image',binary_result)
#cv2.bitwise_not將二值圖片取反
reverse = cv2.bitwise_not(binary_result)
cv2.imshow('reverse binary edge image',reverse)
cv2.waitKey(0)
cv2.destroyAllWindows()
結果:
原圖:
邊緣檢測灰度圖:
二值化:
二值化取反: