跨境派

跨境派

跨境派,专注跨境行业新闻资讯、跨境电商知识分享!

当前位置:首页 > 卖家故事 > [C++] opencv - findContours(查找轮廓)函数介绍和使用场景

[C++] opencv - findContours(查找轮廓)函数介绍和使用场景

时间:2024-04-19 20:50:23 来源:网络cs 作者:焦糖 栏目:卖家故事 阅读:

标签: 使用  场景  函数  轮廓 
阅读本书更多章节>>>>

findContours函数介绍

C++ OpenCV中的findContours函数用于在二值图像中检测轮廓。它可以将图像中的连续区域(通常是物体)提取出来,形成一个轮廓集合。这个函数非常适用于计算机视觉任务,如目标检测、图像分割等。

C++ OpenCV中的findContours函数原型如下:

void findContours(InputArray image, OutputArray contours, OutputArray hierarchy, int mode, int method=RETR_LIST, Point offset=Point());

参数说明:

image:输入的二值图像,通常是经过边缘检测、阈值处理等操作得到的。contours:输出的轮廓集合,每个轮廓由一系列点组成。hierarchy:输出的轮廓层次结构,用于表示轮廓之间的父子关系。mode:轮廓检索模式,常用的有RETR_EXTERNAL(只检测最外层轮廓)、RETR_LIST(检测所有轮廓)、RETR_CCOMP(检测所有轮廓并按从左到右的顺序排列)和RETR_TREE(检测所有轮廓并建立轮廓树)。method:轮廓近似方法,常用的有CHAIN_APPROX_NONE(存储所有顶点)、CHAIN_APPROX_SIMPLE(仅存储水平、垂直方向上的顶点)和CHAIN_APPROX_TC89_L1(使用TEH_CHAIN近似算法)。offset:轮廓点偏移量,默认为(0, 0)。

使用场景

除了图像分割,OpenCV的findContours函数还可以应用于以下场景:

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

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

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

机器人导航:在机器人导航中,通过检测地面上的障碍物和道路边界来规划路径。

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

使用案例

假设我们有一个二值图像,其中包含一个圆形和一个矩形。我们可以使用findContours函数来检测这两个形状的轮廓。

#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中的findContours函数可以在二值图像中检测轮廓,非常适用于计算机视觉任务。通过查找轮廓,我们可以提取出图像中的连续区域,从而进行目标检测、图像分割等操作。

阅读本书更多章节>>>>

本文链接:https://www.kjpai.cn/gushi/2024-04-19/160480.html,文章来源:网络cs,作者:焦糖,版权归作者所有,如需转载请注明来源和作者,否则将追究法律责任!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。

文章评论