- 操作系统:ubuntu22.04
- OpenCV版本:OpenCV4.9
- IDE:Visual Studio Code
- 编程语言:C++11
算法描述
填充一个或多个多边形轮廓所包围的区域。
函数 cv::fillPoly 填充由若干个多边形轮廓所包围的区域。该函数可以填充复杂的区域,例如带有洞的区域、自身相交的轮廓(某些部分)等等。
函数原型1
void cv::fillPoly
(
InputOutputArray img,
InputArrayOfArrays pts,
const Scalar & color,
int lineType = LINE_8,
int shift = 0,
Point offset = Point()
)
参数1
- 参数img 图像.
- 参数pts 多边形数组,其中每个多边形由一系列点表示。
- 参数color 多边形的颜色。
- 参数lineType 多边形边界的类型。参见 LineTypes。
- 参数shift 顶点坐标中的分数位数。
- 参数offset 多边形轮廓所有点的可选偏移量。
函数原型2
void cv::fillPoly
(
InputOutputArray img,
const Point ** pts,
const int * npts,
int ncontours,
const Scalar & color,
int lineType = LINE_8,
int shift = 0,
Point offset = Point()
)
参数2
参数img 图像.
- 参数pts 多边形数组,其中每个多边形由一系列点表示。
- 参数npts 点的个数
- 参数ncontours 轮廓的个数
- 参数color 多边形的颜色。
- 参数lineType 多边形边界的类型。参见 LineTypes。
- 参数shift 顶点坐标中的分数位数。
- 参数offset 多边形轮廓所有点的可选偏移量。
代码示例
#include <opencv2/opencv.hpp>
#include <iostream>
int main()
{
// 创建一个空白图像
cv::Mat image = cv::Mat::zeros(400, 400, CV_8UC3);
// 设置多边形的顶点
std::vector<std::vector<cv::Point>> polygons;
std::vector<cv::Point> polygon;
polygon.push_back(cv::Point(100, 100));
polygon.push_back(cv::Point(200, 100));
polygon.push_back(cv::Point(250, 150));
polygon.push_back(cv::Point(200, 200));
polygon.push_back(cv::Point(150, 250));
polygon.push_back(cv::Point(100, 200));
polygon.push_back(cv::Point(50, 150));
polygon.push_back(cv::Point(100, 175)); // 添加一个额外的顶点以形成凹陷
polygons.push_back(polygon);
// 设置填充颜色
cv::Scalar color(0, 0, 255); // 红色 (BGR)
// 填充多边形
cv::fillPoly(image, polygons, color);
// 显示图像
cv::namedWindow("Polygon Filling", cv::WINDOW_NORMAL);
cv::imshow("Polygon Filling", image);
cv::waitKey(0);
return 0;
}