16 多边形填充与绘制

16 多边形填充与绘制

opencv知识点:

  • 绘制多条多边形曲线 - polylines()

  • 填充绘制的多边形 - fillPoly()

  • 画轮廓 - drawContours()

本课所解决的问题:

  • 如何根据指定的点绘制多边形?
  • 如何填充绘制的多边形?
  • 如何在绘制的同时,同时进行填充?

1.绘制多边形

根据几个点绘制多条边的时候,我们要用到polylines()

polylines
	绘制多条多边形曲线
		共7个参数
			第1个参数 输入
			第2个参数 输入多边形点集(绘制边的顺序,与点集数组中点的顺序有关)
			第3个参数 isclosed(bool类型)
			第4个参数 多边形颜色
			第5个参数 线宽
			第6个参数 lineType
			第7个参数 shift(之前已经讲过,这里不再赘述)

要注意的是,绘制边的顺序,与点集数组中点的顺序有关

程序

//函数定义
void polyline_drawing_demo();

//函数实现
void QuickDemo::polyline_drawing_demo() {

	Mat canvas = Mat::zeros(Size(256, 256), CV_8UC3);

	Point p1(40,40),p2(80,80),p3(80,60),p4(120,80),p5(120,60),p6(160,40);

	std::vector<Point> pts;

	pts.push_back(p1);
	pts.push_back(p2);
	pts.push_back(p3);
	pts.push_back(p4);
	pts.push_back(p5);
	pts.push_back(p6);

	polylines(canvas, pts, true, Scalar(200, 0, 0), 5, 8, 0);

	imshow("000",canvas);
}

11f4b676137f1378f36760cb78cffec

2.填充绘制的多边形

填充我们刚才绘制的轮廓,就要用到fillPoly()

fillPoly
	填充绘制的多边形
		共6个参数
			第1个参数 输入
			第2个参数 点集数组
			第3个参数 填充颜色
			第4个参数 lineType
			第5个参数 shift(不再赘述)
			第6个参数 轮廓所有点的可选偏移

程序

void QuickDemo::polyline_drawing_demo() {

	Mat canvas = Mat::zeros(Size(256, 256), CV_8UC3);

	Point p1(40,40),p2(80,80),p3(80,60),p4(120,80),p5(120,60),p6(160,40);

	std::vector<Point> pts;

	pts.push_back(p1);
	pts.push_back(p2);
	pts.push_back(p3);
	pts.push_back(p4);
	pts.push_back(p5);
	pts.push_back(p6);

	polylines(canvas, pts, true, Scalar(200, 0, 0), 5, 8, 0);

	fillPoly(canvas, pts, Scalar(200, 0, 0), 8, 0);

	imshow("000",canvas);
}

2ed231e7278458c1298650ecb292cc4

3.绘制与填充同时进行

那有没有一种办法,可以在绘制的同时,进行填充呢?
这就用到了drawContours()

drawContours
	绘制轮廓轮廓/填充轮廓
		共9个参数,这里我们只介绍前5个(剩下的有缺省值)
			第1个参数 输入
			第2个参数 多边形轮廓的数组
			第3个参数 选择的多边形轮廓(在数组中的编号,-1为全选)
			第4个参数 多边形颜色
			第5个参数 填充/绘制(-1为填充)
void QuickDemo::polyline_drawing_demo() {

	Mat canvas = Mat::zeros(Size(256, 256), CV_8UC3);

	Point p1(40,40),p2(80,80),p3(80,60),p4(120,80),p5(120,60),p6(160,40);

	std::vector<Point> pts;

	pts.push_back(p1);
	pts.push_back(p2);
	pts.push_back(p3);
	pts.push_back(p4);
	pts.push_back(p5);
	pts.push_back(p6);

	std::vector<std::vector<Point>> contours;

	contours.push_back(pts);

	drawContours(canvas, contours, -1, Scalar(200, 0, 0), -1);

	imshow("000",canvas);
}

4d00a24a4b85e41f9a2d5a7b921bf43

本课所用API查阅

OpenCV 4.6.0 官方文档

polylines()

fillPoly()

drawContours()

原文链接: https://www.cnblogs.com/L707/p/17049846.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    16 多边形填充与绘制

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/311713

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月16日 下午12:07
下一篇 2023年2月16日 下午12:07

相关推荐