[C++] opencv - drawContours(绘制轮廓)函数介绍和使用场景

这篇具有很好参考价值的文章主要介绍了[C++] opencv - drawContours(绘制轮廓)函数介绍和使用场景。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

drawContours函数介绍

OpenCV中的drawContours函数用于在图像上绘制轮廓。其函数原型如下:

比较复制插入新建

void drawContours(InputOutputArray image, InputOutputArray contours, InputOutputArray contourIdx, 
int contourColor, Scalar thickness=Scalar(), int lineType=LINE_8, 
InputArray hierarchy = noArray(), int maxLevel = INT_MAX, Point offset = Point() );

参数说明:

  • image:输出图像,即绘制轮廓后的图像。
  • contours:轮廓集合,每个轮廓由一系列点组成。
  • contourIdx:轮廓索引数组,指定要绘制哪些轮廓。如果为NULL,则绘制所有轮廓。
  • contourColor:轮廓颜色,使用Scalar类型表示。
  • thickness:轮廓线宽,默认值为1。
  • lineType:轮廓线类型,默认值为LINE_8。
  • hierarchy:轮廓层次结构,用于绘制轮廓的父子关系。默认值为noArray()。只有在你想要绘制部分轮廓(参见maxLevel)时,才需要使用这个参数。
  • maxLevel:表示绘制轮廓的最大层级。如果maxLevel为0,则只绘制指定的轮廓;如果maxLevel为1,则绘制轮廓及其所有嵌套轮廓;如果maxLevel为2,则绘制轮廓、所有嵌套轮廓、所有嵌套到嵌套的轮廓等。需要注意的是,当存在层次结构时,这个参数才会被考虑。
  • offset:轮廓点的偏移量,默认值为(0,0)。

使用场景

OpenCV的drawContours函数可以应用于以下场景:

  1. 图像分割:在二值化或灰度图像中,通过绘制轮廓来将图像分割成不同的区域。

  2. 目标检测和识别:在实时视频流或图像中检测和识别特定目标,如人脸、车辆、行人等。

  3. 医学影像分析:在医学影像中查找和分析病变区域,如肿瘤、炎症等。

  4. 文字识别:对印刷体文字图像进行轮廓提取和分析,以便进行后续的文字识别和处理。

  5. 三维重建:在三维重建中,通过检测物体表面的轮廓来确定物体的位置和形状。

使用案例

#include <iostream>
#include <opencv2/opencv.hpp>

using namespace cv;
using namespace std;

int main()
{
    // 读取灰度图像
    Mat src = imread("./3480e7ce_mk_tk_a_c2_6400_4480.png", IMREAD_GRAYSCALE);
    if (src.empty())
    {
        cout << "无法读取图像" << endl;
        return -1;
    }
    imshow("原图", src);
    waitKey(0);
    // 二值化图像
    Mat binary;
    threshold(src, binary, 128, 255, THRESH_BINARY);
    imshow("二值化图", binary);
    waitKey(0);

    // 查找轮廓
    vector<vector<Point>> contours;
    vector<Vec4i> hierarchy;
    findContours(binary, contours, hierarchy, RETR_EXTERNAL, CHAIN_APPROX_SIMPLE);

    // 绘制轮廓
    Mat result(src.size(), CV_8UC3, Scalar(0, 0, 0));
    for (size_t i = 0; i < contours.size(); i++)
    {
        // 蓝色颜色
        Scalar color(255,0,0); 
        // 只绘制第一层的轮廓
        drawContours(result, contours, static_cast<int>(i), color, 2, LINE_8, hierarchy, 0);
    }

    // 显示结果
    imshow("轮廓图", result);
    waitKey(0);

    return 0;
}

运行效果:

opencv的drawcontours,opencv,C++,c++,opencv

二值化图像:

opencv的drawcontours,opencv,C++,c++,opencv

 轮廓图:

opencv的drawcontours,opencv,C++,c++,opencv

总结

drawContours函数是OpenCV库中用于绘制轮廓的一个非常实用的函数。它可以方便地将轮廓信息可视化出来,帮助我们更好地理解图像中的目标信息。在实际应用中,我们可以根据需要选择不同的参数来绘制不同样式的轮廓,从而实现更加灵活的应用效果。文章来源地址https://www.toymoban.com/news/detail-803487.html

到了这里,关于[C++] opencv - drawContours(绘制轮廓)函数介绍和使用场景的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • [C++] opencv - imwrite函数介绍和使用场景

    OpenCV 是一个开源的计算机视觉库,它包含了许多用于图像处理和计算机视觉任务的函数。其中,imsave() 函数是 OpenCV 中的一个非常有用的函数,它可以让程序将处理后的图像数据保存到指定的文件中。 使用 imwrite() 函数可以将处理后的图像数据保存到本地文件系统中。例如,

    2024年02月04日
    浏览(42)
  • [C++] opencv - cvtColor函数介绍和使用场景

    OpenCV是一个开源的计算机视觉库,提供了许多图像处理和计算机视觉方面的功能。其中,cvtColor函数是OpenCV中非常重要的一个函数,用于将一种颜色空间的图像转换为另一种颜色空间的图像。本文将介绍cvtColor函数的相关知识,包括函数的介绍、函数原型和参数说明、函数使用

    2024年02月02日
    浏览(48)
  • [C++] opencv - Mat::convertTo函数介绍和使用场景

    Converts an array to another data type with optional scaling.    该函数主要用于数据类型的相互转换。 The method converts source pixel values to the target data type. saturate_cast is applied at the end to avoid possible overflows: m(x,y)=saturate_castrtype(α(∗this)(x,y)+β)    这是函数底层算法实现公式,了解算法方便我们

    2024年01月18日
    浏览(52)
  • [C++] opencv - HoughCircles(霍夫圆查找)函数介绍和使用场景

    HoughCircles函数用于在灰度图像中使用霍夫变换查找圆。 该函数通过修改霍夫变换来实现,通常可以很好地检测出圆的中心,但可能无法找到正确的半径。可以通过指定半径范围(minRadius和maxRadius)来协助该函数,或者在#HOUGH_GRADIENT方法中将maxRadius设置为负数以仅返回圆心而不进

    2024年02月03日
    浏览(42)
  • [C++] opencv - approxPolyDP(多边形拟合)函数介绍和使用场景

    OpenCV中的 approxPolyDP() 函数用于对形状进行逼近,以减少多边形的顶点数,可以用于对图像轮廓点进行多边形拟合。 函数原型如下: 其中, curve 是输入的点集,类型为 InputArray, 可以是 Mat 、 vectorPoint 等; approxCurve是输出的点集,类型为 OutputArray, 也是 Mat 类型; epsilon 是精

    2024年03月14日
    浏览(70)
  • [C++] opencv - fillPoly(填充多边形)函数介绍和使用场景

    fillPoly() 函数是OpenCV中用于绘制填充多边形的函数。函数原型如下: fillPoly() 函数适用于需要绘制填充多边形的场景,例如在图像上绘制一个封闭的图形、制作一个简单的遮罩等。   fillPoly() 函数是OpenCV中用于绘制填充多边形的函数。可以用来绘制实心三角形,实心矩形,实

    2024年02月19日
    浏览(131)
  • opencv之 drawContours() 函数说明应用

    之前使用mask图还进行了连通域有无status分析,然后才进行的绘制。 今天发现直接使用mask图进行绘制,然后通过设置drawContours的参数可以进行不同层次上缺陷的绘制,然后通过这个事情也说明,有问题可以直接找opencv官网源码进行查看和分析说明。 方法1: cv::FILLED 第五个参

    2024年02月06日
    浏览(47)
  • opencv 基础50-图像轮廓学习03-Hu矩函数介绍及示例-cv2.HuMoments()

    Hu 矩(Hu Moments)是由计算机视觉领域的科学家Ming-Kuei Hu于1962年提出的一种图像特征描述方法。这些矩是用于描述图像形状和几何特征的不变特征,具有平移、旋转和尺度不变性,适用于图像识别、匹配和形状分析等任务。 Ming-Kuei Hu在其论文中提出了七个用于形状描述的独特

    2024年02月13日
    浏览(66)
  • 16- OpenCV:轮廓的发现和轮廓绘制、凸包

    目录 一、轮廓发现 1、轮廓发现(find contour in your image) 的含义 2、相关的API 以及代码演示 二、凸包 1、凸包(Convex Hull)的含义 2、Graham扫描算法- 概念介绍 3、cv::convexHull 以及代码演示 三、轮廓周围绘制矩形和圆形框 一、轮廓发现 1、轮廓发现(find contour in your image) 的含义 轮

    2024年02月21日
    浏览(39)
  • c# opencv 找到图像的轮廓,并绘制轮廓

    原图                                                                                结果图                                                                  本意是想去除白色图像周边的几个白色小点,得到轮廓图后,其他都设置为黑色,结果是白点更明

    2024年02月13日
    浏览(89)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包