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 三元组,也可以是灰度值。
效果展示:
- 凸多边形填充
- 多边形绘制