轮廓 凸轮廓 近似多边形轮廓
凸形状内部的任意两点的连线都在该形状里。
import cv2
import numpy as np
img = cv2.pyrDown(cv2.imread("hammer.jpg", cv2.IMREAD_UNCHANGED))
ret, thresh = cv2.threshold(cv2.cvtColor(img.copy(),
cv2.COLOR_BGR2GRAY) , 127, 255, cv2.THRESH_BINARY) #阈值分割
black = cv2.cvtColor(np.zeros((img.shape[1], img.shape[0]), dtype=np.uint8),
cv2.COLOR_GRAY2BGR)
image, contours, hier = cv2.findContours(thresh, cv2.RETR_EXTERNAL,
cv2.CHAIN_APPROX_SIMPLE)
for cnt in contours:
epsilon = 0.01 * cv2.arcLength(cnt,True) #计算轮廓周长
approx = cv2.approxPolyDP(cnt,epsilon,True) #计算近似的多边形框
hull = cv2.convexHull(cnt) #获取轮廓信息
cv2.drawContours(black, [cnt], -1, (0, 255, 0), 2) #轮廓 绿色
cv2.drawContours(black, [approx], -1, (255, 0, 0), 2) #近似多边形轮廓 蓝色
cv2.drawContours(black, [hull], -1, (0, 0, 255), 2) # 凸轮廓 红色
cv2.imshow("hull", black)
cv2.waitKey()
cv2.destroyAllWindows()