opencv 使用approxPolyDP輪廓近似

approx = cv2.approxPolyDP(contour,epsilon,True) 採用Douglas-Peucker算法,可參考:https://blog.csdn.net/foreverling/article/details/78066632
第一個參數是輪廓的點集。
第二個參數epsilon的含義如下所述,濾掉的線段集離新產生的線段集的距離爲d,若d小於epsilon,則濾掉,否則保留。

第三個參數指示新產生的輪廓是否閉合。
返回的是一些列點組成的多邊形。
下面是設定不同epsilon得到不同近似多邊形的例子代碼:

import cv2
import numpy as np
img = cv2.imread('rect.jpg')
img_gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
ret, thresh = cv2.threshold(img_gray, 127, 255,0)
_,contours,_ = cv2.findContours(thresh,cv2.RETR_EXTERNAL , cv2.CHAIN_APPROX_SIMPLE )
print('len:',len(contours) )
print(type(contours[0]) , contours[0] )
cv2.circle( img ,(contours[0][0][0][0],contours[0][0][0][1]) , 5 , (0, 0, 255), 2 )
cord=str( contours[0][0][0][0]) + ',' + str(contours[0][0][0][1])
cv2.putText(img, cord , (contours[0][0][0][0]-120,contours[0][0][0][1]), cv2.FONT_HERSHEY_COMPLEX, 1.0, (0, 0, 255), 2 )

cv2.circle( img ,(contours[0][1][0][0],contours[0][1][0][1]) , 5 , (0, 0,255), 2 )
cord=str( contours[0][1][0][0]) + ',' + str(contours[0][1][0][1])
cv2.putText(img, cord , (contours[0][1][0][0],contours[0][1][0][1]+32), cv2.FONT_HERSHEY_COMPLEX, 1.0, (0, 0, 255), 2 )
x1 = img.copy()
epsilon = 50 
approx = cv2.approxPolyDP(contours[0],epsilon,True)
cv2.polylines(x1, [approx], True, (0, 0, 255), 2)
cv2.putText(x1, "epsilon:50" , (160,180), cv2.FONT_HERSHEY_COMPLEX, 1.0, (0, 0, 255), 2 )
cv2.imwrite( 'approxcurve1.jpg' , x1 ) 
x1 = img.copy()
epsilon = 30 
approx = cv2.approxPolyDP(contours[0],epsilon,True)
cv2.polylines(x1, [approx], True, (255, 0, 0), 2)
cv2.putText(x1, "epsilon:30" , (160,180), cv2.FONT_HERSHEY_COMPLEX, 1.0, (0, 0, 255), 2 )
cv2.imwrite( 'approxcurve2.jpg' , x1 ) 

x1 = img.copy()
epsilon = 35 
approx = cv2.approxPolyDP(contours[0],epsilon,True)
cv2.polylines(x1, [approx], True, (0, 255, 0), 2)
cv2.putText(x1, "epsilon:35" , (160,180), cv2.FONT_HERSHEY_COMPLEX, 1.0, (0, 0, 255), 2 )
cv2.imwrite( 'approxcurve3.jpg' , x1  ) 

 原圖及三個結果圖:

rect.jpg
rect.jpg​​
approxcurve1.jpg
approxcurve1.jpg​​​​​
approxcurve2.jpg
approxcurve2.jpg
approxcurve3.jpg
approxcurve3.jpg

 

 

 

 

發佈了108 篇原創文章 · 獲贊 29 · 訪問量 31萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章