项目功能实现:对多边形进行轮廓绘制和填充
 按照之前的博文结构来,这里就不在赘述了
一、头文件
mult-drawing.h
#pragma once#include<opencv2/opencv.hpp>using namespace cv;class Mult_Drawing {
public:void mult_drawing();
};#pragma once
二、函数实现
mult-drawing.cpp
Mat canvas = Mat::zeros(Size(512, 512), CV_8UC3);
 定义一个画布,大小为512*512的全0黑色图片
Point p1(100, 100), p2(350, 100), p3(450, 280), p4(320, 450), p5(80, 400);
 得到五个点的位置
pts.push_back(p1); pts.push_back(p2); pts.push_back(p3); pts.push_back(p4); pts.push_back(p5);
 对这五个点进行绘制到pts上
方法一:
 fillPoly(canvas, pts, Scalar(255, 0, 0), LINE_8, 0);
 有了五个点的坐标位置,然后进行填充
 polylines(canvas, pts, true, Scalar(0, 255, 0), 2, LINE_AA, 0);
 类似,根据五个点的坐标位置进行轮廓绘制
 具体的参数定义,可参考博文:十四、图像几何形状绘制
 参数一:要处理的图片对象
 参数二:各个多边形点的坐标
 参数三:线条颜色
 参数四:锯齿优化方法
 参数五:微调偏置优化
方法二:
 drawContours(canvas, contours, -1, Scalar(255, 0, 0), -1);
 直接绘制,但需要轮廓的特征contours
 也就是把pts这些已知的五个点的位置给扔到contours中即可
 contours.push_back(pts);像这样
 参数一:处理的图片对象
 参数二:轮廓数据信息
 参数三:-1表示填充,其他正整数表示线条粗细
 参数四:线条颜色
 参数五:-1表示所有轮廓都绘制填充,其他正整数表示对哪个轮廓进行操作
#include"mult-drawing.h"
#include<iostream>
#include<opencv2/opencv.hpp>void Mult_Drawing::mult_drawing() {Mat canvas = Mat::zeros(Size(512, 512), CV_8UC3);Point p1(100, 100), p2(350, 100), p3(450, 280), p4(320, 450), p5(80, 400);std::vector<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, 0, 0), LINE_8, 0);polylines(canvas, pts, true, Scalar(0, 255, 0), 2, LINE_AA, 0);imshow("mult-drawing", canvas);//方法二:直接填充绘制std::vector<std::vector<Point>>contours;contours.push_back(pts);drawContours(canvas, contours, -1, Scalar(255, 0, 0), -1);imshow("other method", canvas);
}
三、主函数
yy_main.cpp
#include <opencv2/opencv.hpp>
#include <iostream>
#include "mult-drawing.h"using namespace cv;
using namespace std;int main(int argc, char** argv) {Mult_Drawing yy;yy.mult_drawing();waitKey(0);destroyAllWindows();return 0;
}
项目结构如下:
 
 效果图如下:
 