opencv中轮廓可以返回轮廓的坐标吗
时间: 2023-07-28 18:10:43 浏览: 84
是的,OpenCV中的轮廓可以返回轮廓的坐标。在使用OpenCV中的轮廓检测函数(如findContours()函数)后,可以通过遍历轮廓中的点来获取每个点的坐标,从而获取整个轮廓的坐标。具体步骤如下:
1. 使用 findContours() 函数检测轮廓,并将轮廓存储在一个 vector 中。
2. 遍历 vector 中的每个轮廓,使用 for 循环进行遍历。
3. 在每个轮廓中,使用 for 循环遍历每个点。
4. 在每个点中,可以通过 x 和 y 属性获取该点的坐标。
下面是一个示例代码,演示了如何获取轮廓的坐标:
```c++
// 读取图像
Mat image = imread("example.jpg");
// 转换为灰度图像
Mat gray;
cvtColor(image, gray, COLOR_BGR2GRAY);
// 二值化图像
Mat binary;
threshold(gray, binary, 0, 255, THRESH_BINARY_INV | THRESH_OTSU);
// 查找轮廓
vector<vector<Point>> contours;
vector<Vec4i> hierarchy;
findContours(binary, contours, hierarchy, RETR_EXTERNAL, CHAIN_APPROX_SIMPLE);
// 遍历轮廓
for (size_t i = 0; i < contours.size(); i++) {
// 遍历轮廓中的每个点
for (size_t j = 0; j < contours[i].size(); j++) {
// 获取点的坐标
int x = contours[i][j].x;
int y = contours[i][j].y;
// 在控制台输出坐标
cout << "x: " << x << ", y: " << y << endl;
}
}
```
上述代码中,我们首先读取一张图像,并将其转换为灰度图像。然后通过二值化处理得到二值图像,接着使用 findContours() 函数查找轮廓。最后使用嵌套的 for 循环依次获取轮廓中的每个点,并输出其坐标。
阅读全文