import numpy as np
import cv2
import random
# 但因为我们要的是 0 或 1 的值,所以直接创建一个这样的数组
arr = np.zeros((640, 640), dtype=np.uint8)
# 为了简化,我们只将一部分设置为 1
arr[100:random.randint(100,500), 10:random.randint(100,500)] = 255
img = np.uint8(arr)
print(img.shape,"shape")
contours, hierarchy = cv2.findContours(img, cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE) # OpenCV4~
cnts = sorted(contours, key=cv2.contourArea, reverse=True) # 所有轮廓按面积排序
cnt = cnts[0] # 第 0 个轮廓,面积最大的轮廓,(2867, 1, 2)
# cntPoints = np.squeeze(cnt) # 删除维度为 1 的数组维度,(2867, 1, 2)->(2867,2)
area = cv2.contourArea(cnt) # 轮廓面积 (area)
print("\t轮廓面积: ", area)
perimeter = cv2.arcLength(cnt, True) # 轮廓周长 (perimeter)
print("\t轮廓周长: {:.1f}".format(perimeter))
compact = perimeter ** 2 / area # 轮廓的紧致度 (compactness)
print("\t轮廓紧致度: