阅读量:0
fillPoly函数介绍
fillPoly()
函数是OpenCV中用于绘制填充多边形的函数。函数原型如下:
/** @brief Fills the area bounded by one or more polygons. The function cv::fillPoly fills an area bounded by several polygonal contours. The function can fill complex areas, for example, areas with holes, contours with self-intersections (some of their parts), and so forth. @param img Image. @param pts Array of polygons where each polygon is represented as an array of points. @param color Polygon color. @param lineType Type of the polygon boundaries. See #LineTypes @param shift Number of fractional bits in the vertex coordinates. @param offset Optional offset of all points of the contours. */ CV_EXPORTS_W void fillPoly(InputOutputArray img, InputArrayOfArrays pts, const Scalar& color, int lineType = LINE_8, int shift = 0, Point offset = Point() ); /** @overload */ CV_EXPORTS void fillPoly(InputOutputArray img, const Point** pts, const int* npts, int ncontours, const Scalar& color, int lineType = LINE_8, int shift = 0, Point offset = Point() ); 函数参数说明如下: img:输入图像。 pts:多边形数组,其中每个多边形由点数组表示。 color:多边形的颜色。 lineType:多边形边界的类型。参见#LineTypes。 shift:顶点坐标中的分数位数。 offset:轮廓的所有点的可选偏移量。 此外,还提供了一个重载版本的fillPoly函数,它接受一个const Point**类型的pts参数,以及一个const int*类型的npts参数和一个表示轮廓数量的整数ncontours。
使用场景
fillPoly()
函数适用于需要绘制填充多边形的场景,例如在图像上绘制一个封闭的图形、制作一个简单的遮罩等。
使用案例
绘制实心三角形
#include <opencv2/opencv.hpp> #include <iostream> using namespace cv; using namespace std; int main() { // 创建一个黑色背景的图像 Mat img = Mat::zeros(300, 300, CV_8UC3); // 定义三角形三个顶点的坐标 Point points[1][3]; points[0][0] = Point(50, 50); points[0][1] = Point(150, 200); points[0][2] = Point(200, 50); // 定义三角形的颜色 Scalar color(0, 255, 0); // 将三角形的顶点坐标存储到数组中 const Point* ppts[1] = {points[0]}; const int npts[] = {3}; // 在图像上绘制实心三角形 fillPoly(img, ppts, npts, 1, color); // 显示结果 imshow("实心三角形", img); waitKey(0); return 0; }
绘制实心矩形
#include <opencv2/opencv.hpp> #include <opencv2/highgui/highgui.hpp> #include <opencv2/opencv.hpp> #include <iostream> using namespace cv; using namespace std; int main() { // 创建一个空白图像 Mat image = Mat::zeros(400, 400, CV_8UC3); // 定义矩形的顶点 Point pts[4]; pts[0] = Point(50, 50); pts[1] = Point(200, 50); pts[2] = Point(200, 200); pts[3] = Point(50, 200); // 将顶点放入一个vector中 vector<Point> poly; for (int i = 0; i < 4; i++) { poly.push_back(pts[i]); } // 填充矩形 fillPoly(image, poly, Scalar(255, 0, 0)); // 显示图像 imshow("实心矩形", image); waitKey(0); return 0; }
绘制实心多边形
#include <opencv2/opencv.hpp> #include <iostream> using namespace cv; using namespace std; int main() { // 创建一个空白图像 Mat image = Mat::zeros(512, 512, CV_8UC3); // 定义矩形的顶点 Point pts[5]; pts[0] = Point(100, 100); pts[1] = Point(300, 150); pts[2] = Point(300, 350); pts[3] = Point(250, 450); pts[4] = Point(50, 450); // 将顶点放入一个vector中 vector<Point> poly; for (int i = 0; i < 5; i++) { poly.push_back(pts[i]); } // 填充多边形 fillPoly(image, poly, Scalar(255, 0, 0)); // 显示图像 imshow("实心多边形", image); waitKey(0); return 0; }
结论
fillPoly()
函数是OpenCV中用于绘制填充多边形的函数。可以用来绘制实心三角形,实心矩形,实心多边形等。