C++opencv中findContours函数用法
时间: 2023-08-18 07:40:27 浏览: 274
在C++的OpenCV中,findContours函数用于查找图像中的轮廓。其函数原型如下:
```cpp
void findContours(InputOutputArray image, OutputArrayOfArrays contours, OutputArray hierarchy, int mode, int method, Point offset = Point());
```
其中,
- InputOutputArray image:输入图像,必须为8位单通道二进制图像。
- OutputArrayOfArrays contours:输出轮廓,为一个向量类型,包含所有检测到的轮廓。
- OutputArray hierarchy:轮廓的层次结构,可不传入该参数。
- int mode:轮廓检索模式,可取值为RETR_EXTERNAL、RETR_LIST、RETR_CCOMP和RETR_TREE。
- int method:轮廓逼近方法,可取值为CHAIN_APPROX_NONE、CHAIN_APPROX_SIMPLE、CHAIN_APPROX_TC89_L1和CHAIN_APPROX_TC89_KCOS。
- Point offset:轮廓点的可选偏移量。
例如,下面的代码使用findContours函数查找图像中的轮廓并在图像中绘制出来:
```cpp
Mat image = imread("example.jpg", IMREAD_GRAYSCALE);
Mat binary;
threshold(image, binary, 100, 255, THRESH_BINARY);
vector<vector<Point>> contours;
vector<Vec4i> hierarchy;
findContours(binary, contours, hierarchy, RETR_TREE, CHAIN_APPROX_SIMPLE, Point());
Mat result = Mat::zeros(image.size(), CV_8UC3);
for (size_t i = 0; i < contours.size(); i++) {
drawContours(result, contours, i, Scalar(0, 0, 255), 2, 8, hierarchy);
}
imshow("result", result);
```
其中,先使用threshold函数将图像二值化,然后使用findContours函数查找轮廓,并使用drawContours函数将轮廓绘制在新的图像上,最后显示结果图像。
阅读全文