OpenCV 提供了丰富的图形绘制和填充功能,主要通过 cv::rectangle, cv::circle, cv::line, cv::polylines, cv::fillPoly 和 cv::ellipse 等函数实现。以下是一些基本的图形绘制和填充操作的说明:
-
矩形:
- 函数:
cv::rectangle - 语法:
cv::rectangle(img, rect, color, thickness, lineType, shift) - 参数:
img: 目标图像。rect:cv::Rect类型的对象,定义矩形的左上角和右下角坐标。color: 矩形的颜色,如cv::Scalar(255, 0, 0)代表红色。thickness: 线条的宽度,如果为负值,表示填充矩形。lineType: 线型,如cv::LINE_8(8-连接线)或cv::LINE_AA(抗锯齿线)。shift: 位移量,用于指定坐标的小数部分。
- 函数:
-
圆:
- 函数:
cv::circle - 语法:
cv::circle(img, center, radius, color, thickness, lineType, shift) - 参数与
cv::rectangle类似,但rect替换为圆心(center)和半径radius。
- 函数:
-
线:
- 函数:
cv::line - 语法:
cv::line(img, pt1, pt2, color, thickness, lineType, shift) - 参数:
pt1和pt2: 定义线的两个端点。- 其他参数与
cv::rectangle相同。
- 函数:
-
多边形:
- 函数:
cv::polylines和cv::fillPoly cv::polylines用于绘制未闭合的多边形线条,cv::fillPoly用于填充多边形。- 语法:
cv::polylines(img, points, isClosed, color, thickness, lineType, shift, connectType) - 参数:
points: 一个包含多边形顶点的std::vector<std::vector<cv::Point>>。isClosed: 如果true,多边形被视为闭合的,可以用于填充。- 其他参数与
cv::line类似。
- 函数:
-
椭圆:
- 函数:
cv::ellipse - 语法:
cv::ellipse(img, center, axes, angle, startAngle, endAngle, color, thickness, lineType, shift) - 参数:
center: 椭圆中心。axes:cv::Size类型,定义椭圆的主轴长度。angle: 主轴相对于水平轴的角度。startAngle和endAngle: 指定椭圆弧的起始和结束角度(以度为单位)。- 其他参数与
cv::rectangle相似。
- 函数:
-
凸多边形:
- 函数:
cv::fillConvexPoly cv::fillConvexPoly中用于填充凸多边形的一个函数- 语法:fillConvexPoly(InputOutputArray img, InputArray points, const Scalar& color, int lineType = LINE_8,int shift = 0);
- 参数:
pts: 指向凸多边形顶点坐标的指针。顶点顺序需按照顺时针或逆时针方向排列。npts: 多边形顶点的数量。color: 填充颜色,类型为cv::Scalar,例如cv::Scalar(colorB, colorG, colorR),分别代表 BGR 通道的值。lineType: 可选参数,定义边界线的类型,默认为cv::LINE_8,表示 8 连接线。shift: 可选参数,点坐标中小数点的位置,一般情况下设为 0。
- 函数:
这些函数都直接修改输入图像 img,因此在绘制前要确保图像有足够的通道(例如,CV_8UC3 表示一个 8 位、3 通道的彩色图像)。同时,颜色 color 可以是 RGB 三元组,也可以是灰度值。
效果展示:
- 凸多边形填充

- 多边形绘制
