无论是凸多边形,还是凹多边形,已知多边形的顶点,可获取一个多边形区域填充的掩码。
使用fillPoly
函数实现。
void fillPoly(Mat& img,
const Point** pts,
const int* npts,
int ncontours,
const Scalar& color,
int lineType=8,
int shift=0, Point offset=Point() )
代码:
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <iostream>
using namespace std;
using namespace cv;
int main()
{
int width = 640;
int height = 480;
Mat src(Size(width,height ),CV_8UC1);
src = Scalar::all(0);
Point rook_points1[1][3];
Point rook_points2[1][4];
//三角形的顶点
rook_points1[0][0] = Point(200,200);
rook_points1[0][1] = Point(100,400);
rook_points1[0][2] = Point(400, 300);
//四边形的顶点
rook_points2[0][0] = Point(300, 50);
rook_points2[0][1] = Point(350, 200);
rook_points2[0][2] = Point(500, 200);
rook_points2[0][3] = Point(400, 50);
const Point* ppt[2] = { rook_points1[0],rook_points2[0] };
int npt[] = {3,4 };
int lineType = 8;
int npoly = 2;
//填充多变形的函数
fillPoly(src,ppt,npt,npoly,Scalar(255),lineType);
imshow("result",src);
waitKey(0);
return 0;
}