基础知识:嵌套容器C++
std::Vector<Vector<数据类型>> 容器名;
1.填充函数 fillPoly(图像1, 容器, Scalar(255, 255, 0), 8, 0);
2.填充线 polylines(图像2, 容器2, true, Scalar(0, 0, 255), 2, LINE_AA, 0);
3.绘线+填充
source code
(1)创建一个512*512的矩阵
Mat canvas = Mat::zeros(Size(512, 512), CV_8UC3);
(2)创建5个点
Point p1(100, 100);
Point p2(120, 100);
Point p3(130, 80);
Point p4(90, 60);
Point p5(100, 100);
(3)创建 子容器
std::vector<Point> pts;
(4)往容器中存放点
pts.push_back(p1);
pts.push_back(p2);
pts.push_back(p3);
pts.push_back(p4);
pts.push_back(p5);
(5)大容器
std::vector<std::vector<Point>> contours;
(6)小容器放到大容器中
contours.push_back(pts);
(7)填充和绘制曲线,并显示
fillPoly(canvas, pts, Scalar(255, 255, 0), 8, 0);
polylines(canvas, pts, true, Scalar(0, 0, 255), 2, LINE_AA, 0);
drawContours(canvas, contours, -1, Scalar(255, 0, 0), -1);
imshow("多边形绘制", canvas);
代码示例:
void QuickDemo::polyline_drawing_demo() {
Mat canvas = Mat::zeros(Size(512, 512), CV_8UC3);
Point p1(100, 100);
Point p2(120, 100);
Point p3(130, 80);
Point p4(90, 60);
Point p5(100, 100);
std::vector<Point>pts;
pts.push_back(p1);
pts.push_back(p2);
pts.push_back(p3);
pts.push_back(p4);
pts.push_back(p5);
std::vector<std::vector<Point>>contours;
contours.push_back(pts);
//polylines(canvas,pts,true,Scalar(255,0,0),2,8,0);
//fillPoly(canvas,pts,Scalar(255,255,0),8,0);
drawContours(canvas,contours,-1,Scalar(255, 0, 0), 2);
imshow("绘制填充多边形",canvas);
}