# 检测图片的轮廓
def getContours(img):
# contours:list结构,列表中每个元素代表一个边沿信息。每个元素是(x, 1, 2)的三维向量,x表示该条边沿里共有多少个像素点,第三维的那个“2”表示每个点的横、纵坐标;
# hierarchy:返回类型是(x, 4)的二维ndarray。x和contours里的x是一样的意思。
for cnt in contours:
#传入轮廓计算面积
area = cv2.contourArea(cnt)
print(area)
if area>500:
# 第一个参数是指明在哪幅图像上绘制轮廓;image为三通道才能显示轮廓
# 第二个参数是轮廓本身,在Python中是一个list;
# 第三个参数指定绘制轮廓list中的哪条轮廓,如果是 - 1,则绘制其中的所有轮廓。后面的参数很简单。其中thickness表明轮廓线的宽度,如果是 - 1(cv2.FILLED),则为填充模式。
cv2.drawContours(imgContour, cnt, -1, (255, 0, 0), 3)
# 计算轮廓的周长
peri = cv2.arcLength(cnt,True)
#print(peri)
# 用于获得轮廓的近似值,使用cv2.drawCountors进行画图操作 , 参数说明:cnt为输入的轮廓值, epsilon为阈值T,通常使用轮廓的周长作为阈值,True表示的是轮廓是闭合的
approx = cv2.approxPolyDP(cnt,0.02*peri,True)
print(len(approx))
# 提取拐点
objCor = len(approx)
# cv2.boundingRect矩阵边框,xy为左上,长宽
x, y, w, h = cv2.boundingRect(approx)
# 三角形
if objCor ==3: objectType ="Tri"
elif objCor == 4:
# 判断长方形还是正方形
aspRatio = w/float(h)
if aspRatio >0.98 and aspRatio <
【opencv-python 检测图片的轮廓形状】检测图片的轮廓为什么图形,包含三角形,圆形,矩形,正方形
于 2022-04-10 16:09:58 首次发布