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  ) 

 原图及三个结果图:

opencv 使用approxPolyDP轮廓近似_第1张图片 rect.jpg​​
opencv 使用approxPolyDP轮廓近似_第2张图片 approxcurve1.jpg​​​​​
opencv 使用approxPolyDP轮廓近似_第3张图片 approxcurve2.jpg
opencv 使用approxPolyDP轮廓近似_第4张图片 approxcurve3.jpg

 

 

 

 

你可能感兴趣的:(python,opencv,opencv,approxPolyDP)