1. 程式人生 > >初學opencv/形態學邊緣檢測

初學opencv/形態學邊緣檢測

形態學檢測邊緣的原理很簡單,在膨脹時,影象中的物體會想周圍“擴張”;腐蝕時,影象中的物體會“收縮”。比較這兩幅影象,由於其變化的區域只發生在邊緣。所以這時將兩幅影象相減,得到的就是影象中物體的邊緣。

#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()

結果:

原圖:
這裡寫圖片描述

邊緣檢測灰度圖:
這裡寫圖片描述

二值化:
這裡寫圖片描述

二值化取反:
這裡寫圖片描述