void QUickdemo::polyline_drawing_demo(Mat& image)
{
Mat canvas = Mat::zeros(Size(512,512), CV_8UC3);
Point p1(100, 100);
Point p2(350, 100);
Point p3(450, 280);
Point p4(320, 450);
Point p5(80, 400);
std::vector<Point>pts;--Point表示二维坐标点,pts存储多个像素点
pts.push_back(p1);
pts.push_back(p2);
pts.push_back(p3);
pts.push_back(p4);
pts.push_back(p5);
fillPoly(canvas, pts, Scalar(255, 255, 0), 8, 0);--
• canvas:目标图像,函数会在这个图像上进行绘制操作。
• pts:一个std::vector<Point>类型的向量的集合,每个内部向量表示一个多边形的顶点集合。
• Scalar(255, 255, 0):指定填充的颜色,这里是黄色(蓝色通道为 0,绿色通道为 255,红色通道为 255)。
• 8:连接类型,通常表示 8 连接,允许对角线方向的连接。
• 0:位移参数,一般使用默认值。
polylines(canvas, pts, true, Scalar(0, 0, 255), 2, 8, 0);--
在 OpenCV 中,polylines函数用于在图像上绘制一系列的多边形轮廓。
函数原型:
void polylines(Mat& img, const std::vector<std::vector<Point> >& pts, bool isClosed, const Scalar& color, int thickness = 1, int lineType = LINE_8, int shift = 0);
参数解释:
• img:要在其上绘制多边形的图像。
• pts:一个包含多个多边形顶点集合的向量。每个内部的向量表示一个多边形的顶点坐标。
• isClosed:表示多边形是否闭合。如果为true,则多边形的最后一个点会与第一个点连接起来形成闭合图形;如果为false,则多边形不闭合。
• color:多边形的颜色,可以是一个Scalar对象,表示 B(蓝色)、G(绿色)、R(红色)和 alpha(透明度)通道的值。
• thickness:多边形轮廓的线宽。
• lineType:线条的类型,可以是LINE_4、LINE_8或LINE_AA等。
• shift:坐标点的小数位数。
imshow("多边形绘制",canvas);
}
另一种表现形式
std::vector<std::vector<Point>>contours;--声明了一个可以存储多个向量contours(每个向量存储一组点)的容器
contours.push_back(pts);--将之前存储的包含点的向量pts添加到contours中
drawContours(canvas, contours, -1, Scalar(255, 0, 0), -1);
canvas:要在其上绘制轮廓的图像。
• contours:存储轮廓信息的std::vector<std::vector<Point>>类型的向量。如前面解释的,这个向量存储了多个由一组坐标点组成的轮廓。
• -1:表示绘制所有的轮廓。如果指定一个非负整数,则表示绘制指定索引的轮廓。
• Scalar(255, 0, 0):表示绘制轮廓的颜色。在这个例子中,颜色为蓝色(蓝色通道为 255,绿色通道为 0,红色通道为 0)。
• -1:表示轮廓内部被填充。如果设置为一个正整数,则表示轮廓线的宽度。
这个函数会将contours中的所有轮廓用指定的颜色绘制在图像canvas上,如果最后一个参数为-1,则会填充轮廓内部。