findcontours c++ ccomp和list速度差距
时间: 2023-05-20 07:04:31 浏览: 81
这个问题涉及编程,我可以回答。findContours是OpenCV中的一个函数,用于在二值图像中寻找轮廓。ccomp是一个参数,表示轮廓的类型,而list则是一个返回值,表示轮廓的列表。在使用findContours函数时,ccomp的取值不同,会影响函数的速度。而使用list时,由于需要动态分配内存,会比较慢。因此,如果需要高效地寻找轮廓,可以尽量避免使用list。
相关问题
findcontours函数参数C++版本
在C++中,findContours函数有以下参数:
```C++
void findContours(InputOutputArray image, OutputArrayOfArrays contours, OutputArray hierarchy, int mode, int method, Point offset = Point());
```
其中,各参数的含义为:
- `image`:输入的二值图像,要求为8位单通道图像,非零像素表示目标。
- `contours`:输出的轮廓信息,为一个向量,每个元素都是一个轮廓,由一系列点组成。
- `hierarchy`:轮廓的层级信息,为一个可选的输出参数。
- `mode`:轮廓查找模式,有以下几种模式可选:
- `RETR_EXTERNAL`:只检测最外层轮廓。
- `RETR_LIST`:检测所有轮廓,但不建立轮廓之间的层级关系。
- `RETR_CCOMP`:检测所有轮廓,建立两层层级关系。
- `RETR_TREE`:检测所有轮廓,建立完整的层级关系。
- `method`:轮廓逼近方法,有以下几种方法可选:
- `CHAIN_APPROX_NONE`:保存所有的轮廓点。
- `CHAIN_APPROX_SIMPLE`:只保留轮廓的拐点。
- `CHAIN_APPROX_TC89_L1`和`CHAIN_APPROX_TC89_KCOS`:使用Teh-Chin链逼近算法中的一个。
- `offset`:可选的偏移量,用于指定轮廓点的偏移量。
opencv c++中findcontours语法
在OpenCV C++中,`findContours`函数的语法如下:
```c++
void findContours(InputOutputArray image, OutputArrayOfArrays contours, OutputArray hierarchy, int mode, int method, Point offset = Point());
```
其中,参数含义如下:
- `image`:输入的二值图像,通常为经过边缘检测后得到的图像。
- `contours`:输出的轮廓,为一个`vector<vector<Point> >`类型的数组,其中每个元素表示一个轮廓,包含一系列点的坐标。
- `hierarchy`:输出的轮廓的层级关系,为一个`vector<Vec4i>`类型的数组,其中每个元素包含四个整数,分别表示当前轮廓的父轮廓、子轮廓、内嵌轮廓和外层轮廓的索引。
- `mode`:轮廓检索模式,可以取以下值:
- `RETR_EXTERNAL`:只检索最外层的轮廓。
- `RETR_LIST`:检索所有轮廓,但不建立轮廓间的层级关系。
- `RETR_CCOMP`:检索所有轮廓,并将轮廓分为两层:顶层为各部分的外部边界,次层为空洞的边界。
- `RETR_TREE`:检索所有轮廓,并重构嵌套轮廓的完整层级关系。
- `method`:轮廓逼近方法,可以取以下值:
- `CHAIN_APPROX_NONE`:保存物体边界上所有连续的轮廓点到contours向量内。
- `CHAIN_APPROX_SIMPLE`:压缩水平、垂直和对角线方向上的像素,仅保留终点坐标。
- `CHAIN_APPROX_TC89_L1`:使用Teh-Chin链逼近算法中的L1距离。
- `CHAIN_APPROX_TC89_KCOS`:使用Teh-Chin链逼近算法中的Kcos距离。
- `offset`:可选的偏移量,用于指定轮廓点坐标的偏移值。
例如,在检测最外层轮廓并使用简单的轮廓逼近方法时,可以这样调用`findContours`函数:
```c++
Mat img = imread("test.jpg", IMREAD_GRAYSCALE);
Mat img_canny;
Canny(img, img_canny, 100, 200);
vector<vector<Point>> contours;
findContours(img_canny, contours, RETR_EXTERNAL, CHAIN_APPROX_SIMPLE);
```
这将读入名为`test.jpg`的灰度图像,对其进行Canny边缘检测,并在其中寻找最外层轮廓,使用简单的轮廓逼近方法。最终,找到的轮廓将存储在`contours`向量内。
阅读全文