行业知识
[C++] opencv - findContours(查找轮廓)函数介绍和使用场景
2026-11-11 07:36:43
来源:互联网转载
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 #include 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 -