一、轮廓提取函数
void findContours//提取轮廓,用于提取图像的轮廓
(
InputOutputArray image,//输入图像,必须是8位单通道图像,并且应该转化成二值的
OutputArrayOfArrays contours,//检测到的轮廓,每个轮廓被表示成一个point向量
OutputArray hierarchy,//可选的输出向量,包含图像的拓扑信息。其中元素的个数和检测到的轮廓的数量相等
int mode,//说明需要的轮廓类型和希望的返回值方式
int method,//轮廓近似方法
Point offset = Point()
)
void drawContours//绘制轮廓,用于绘制找到的图像轮廓
(
InputOutputArray image,//要绘制轮廓的图像
InputArrayOfArrays contours,//所有输入的轮廓,每个轮廓被保存成一个point向量
int contourIdx,//指定要绘制轮廓的编号,如果是负数,则绘制所有的轮廓
const Scalar& color,//绘制轮廓所用的颜色
int thickness = 1, //绘制轮廓的线的粗细,如果是负数,则轮廓内部被填充
int lineType = 8, /绘制轮廓的线的连通性
InputArray hierarchy = noArray(),//关于层级的可选参数,只有绘制部分轮廓时才会用到
int maxLevel = INT_MAX,//绘制轮廓的最高级别,这个参数只有hierarchy有效的时候才有效
//maxLevel=0,绘制与输入轮廓属于同一等级的所有轮廓即输入轮廓和与其相邻的轮廓
//maxLevel=1, 绘制与输入轮廓同一等级的所有轮廓与其子节点。
//maxLevel=2,绘制与输入轮廓同一等级的所有轮廓与其子节点以及子节点的子节点
Point offset = Point()
)
二、contours结构
- Python中contours结构是个四重数组,第3、第4分别是点坐标的x,y值。
利用这个结构,直接调用drawContours画出图形,计算出面积。
# -*- coding: utf-8 -*-
"""
Created on Sat Sep 7 16:46:14 2024
ky_Area015.py
"""
import cv2
import numpy as np
array = np.zeros((1, 1, 3, 2), dtype=int)
img = np.zeros((400, 500, 3), dtype=np.uint8)
points = np.array([[100, 300], [400, 300], [300, 150]])
for i in range(len(points)):
array[0][0][i]=points[i]
print(array)
isClosed = True
color = (0, 255, 0)
thickness = 2
# cv2.polylines(img, [array[0][0]], isClosed, color, thickness)
# dist = cv2.pointPolygonTest(cnt, (100, 100), True)
dst=cv2.drawContours(image=img,contours=array,contourIdx=-1,color=(0,0,255),thickness=2)
area = cv2.contourArea(array[0])
cv2.putText(img, "area=" + str(round(area, 1)), (0, 15),
cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 1)
cv2.imshow('Image', dst)
cv2.waitKey(0)
cv2.destroyAllWindows()
三、运行结果