21xrx.com
2024-09-17 11:48:57 Tuesday
登录
文章检索 我的文章 写文章
OpenCV多边形函数的使用和示例详解
2023-08-19 18:03:06 深夜i     --     --
OpenCV 多边形函数 使用 示例 详解

OpenCV是一个开源的计算机视觉库,广泛应用于图像处理、目标识别和机器视觉等领域。其中,多边形函数是OpenCV中非常重要的一部分,可以用于实现多边形的绘制、填充、轮廓提取等操作。本文将详细介绍OpenCV多边形函数的使用和示例。

在OpenCV中,多边形函数主要包括绘制函数、填充函数和轮廓提取函数。首先,我们来看一下多边形的绘制函数:`cv::polylines`。这个函数可以用来绘制一个或多个多边形,通过传入不同的点集来定义多边形的形状。例如,我们可以使用以下代码来绘制一个三角形:


cv::Mat image(500, 500, CV_8UC3, cv::Scalar(0, 0, 0)); // 创建一个黑色背景的图像

std::vector<cv::Point> points; // 定义三角形的三个顶点

points.push_back(cv::Point(100, 100));

points.push_back(cv::Point(400, 100));

points.push_back(cv::Point(250, 400));

std::vector<std::vector<cv::Point>> contours; // 定义一个轮廓数组

contours.push_back(points);

cv::polylines(image, contours, true, cv::Scalar(0, 255, 0), 3); // 绘制轮廓

cv::imshow("Image", image);

cv::waitKey(0);

上述代码首先创建了一个500x500像素的黑色背景图像,并定义了一个包含三个顶点的点集,然后将这个点集传入`cv::polylines`函数中进行绘制。`cv::polylines`函数的第三个参数指定是否封闭多边形,此处我们选择封闭多边形,所以传入`true`。绘制的轮廓使用了绿色(RGB值为(0, 255, 0)),线宽为3像素。最后,调用`cv::imshow`函数显示结果图像。

除了绘制函数,OpenCV还提供了多边形填充函数:`cv::fillPoly`。这个函数可以用来填充一个或多个多边形,同样通过传入不同的点集来定义多边形的形状。我们可以使用以下代码来实现多边形的填充:


cv::Mat image(500, 500, CV_8UC3, cv::Scalar(0, 0, 0)); // 创建一个黑色背景的图像

std::vector<cv::Point> points; // 定义多边形的顶点

points.push_back(cv::Point(100, 100));

points.push_back(cv::Point(400, 100));

points.push_back(cv::Point(400, 400));

points.push_back(cv::Point(100, 400));

std::vector<std::vector<cv::Point>> contours; // 定义一个轮廓数组

contours.push_back(points);

cv::fillPoly(image, contours, cv::Scalar(0, 255, 0)); // 填充多边形

cv::imshow("Image", image);

cv::waitKey(0);

上述代码首先创建了一个黑色背景图像,并定义了一个包含四个顶点的点集,然后将这个点集传入`cv::fillPoly`函数中进行填充。填充的多边形使用了绿色(RGB值为(0, 255, 0))。最后,调用`cv::imshow`函数显示结果图像。

最后,我们来看一下多边形轮廓提取函数:`cv::findContours`。这个函数可以用来提取图像中的多边形轮廓,并将其存储为轮廓链表。以下是一个示例:


cv::Mat image = cv::imread("example.png"); // 从文件加载图像

cv::Mat gray;

cv::cvtColor(image, gray, cv::COLOR_BGR2GRAY); // 将图像转换为灰度图像

cv::Mat binary;

cv::threshold(gray, binary, 128, 255, cv::THRESH_BINARY); // 对灰度图像进行二值化处理

std::vector<std::vector<cv::Point>> contours; // 定义一个轮廓数组

cv::findContours(binary, contours, cv::RETR_EXTERNAL, cv::CHAIN_APPROX_SIMPLE); // 提取轮廓

cv::Mat result = cv::Mat::zeros(image.size(), CV_8UC3); // 创建一个与原图像大小相同的黑色背景图像

for (int i = 0; i < contours.size(); i++) {

  cv::drawContours(result, contours, i, cv::Scalar(0, 255, 0), 2); // 绘制轮廓

}

cv::imshow("Image", result);

cv::waitKey(0);

上述代码首先从文件加载图像,并将其转换为灰度图像,然后对灰度图像进行二值化处理。接着,定义一个轮廓数组,并调用`cv::findContours`函数提取轮廓。最后,创建一个与原图像大小相同的黑色背景图像,并使用`cv::drawContours`函数绘制轮廓。最终,调用`cv::imshow`函数显示结果图像。

综上所述,本文详细介绍了OpenCV多边形函数的使用和示例。通过使用多边形函数,我们可以方便地实现多边形的绘制、填充和轮廓提取等操作,为图像处理和计算机视觉任务提供了强大的支持。希望本文对大家理解和应用OpenCV多边形函数有所帮助。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复