# 二值化、canny二值化
# 直接在原图上绘制轮廓
# 注意等级关系
import cv2
import numpy as np
img_path = r".\R-C.jpg"
img = cv2.imread(img_path)
# 将彩色图像转为黑白图像(必须)
img_gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
查找并绘制轮廓
会得到好多轮廓(类型为np.int32),以元组的形式存储
# 二值化
thred,img0 = cv2.threshold(img_gray,172,255,cv2.THRESH_BINARY)
# 查找轮廓,新版本返回轮廓和层级
# contours是一个列表,里面放着好多轮廓
# 第二个参数可选:cv2.RETR_EXTERNAL、cv2.RETR_LIST、cv2.RETR_CCOMP
# 第三个参数常用:cv2.CHAIN_APPROX_SIMPLE(保存角点)、cv2.CHAIN_APPROX_None(保存所有轮廓上的点)
contours ,hierarchy = cv2.findContours(img0,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
# 绘制轮廓(会直接修改原图,注意先保存一份原图)
# 第三个参数为使用的轮廓id,-1为全部使用,第四个参数为轮廓颜色,第五个参数为线的粗细
cv2.drawContours(img,contours,-1,(0,0,255),2)
计算面积
# 计算面积
# 先画出轮廓看看是不是自己想要的,即确定轮廓索引
area = cv2.contourArea(contours[1])
计算周长
# 计算周长(封闭或者不封闭)
perimeter = cv2.arcLength(contours[1],closed = True)