import cv2 import numpy as np img = cv2.imread(a.jpg, 0) reg, thresh = cv2.threshold(img, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU) contours, hierarchy = cv2.findContours(thresh, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE) # 以数字3的轮廓为例 cnt = contours[0] area = cv2.contourArea(cnt) # 轮廓面积 perimeter = cv2.arcLength(cnt, True) #轮廓周长, 参数2表示轮廓是否封闭,显然我们的轮廓是封闭的,所以是True。 #形状的外接矩形有两种,如上图,绿色的叫外接矩形,表示不考虑旋转并且能包含整个轮廓的矩形。蓝色的叫最小外接矩,考虑了旋转 x, y, w, h = cv2.boundingRect(cnt) # 外接矩形 #x,y是矩阵左上点的坐标,w,h是矩阵的宽和高 cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 2) rect = cv2.minAreaRect(cnt) # 最小外接矩形 box = np.int0(cv2.boxPoints(rect)) # 矩形的四个角点取整 cv2.drawContours(img, [box], 0, (255, 0, 0), 2)