drawContours 函数的结果怎么保存
时间: 2023-09-20 08:06:15 浏览: 122
提供轮廓拓扑结信息(hierarchy)且contourIdx的值为-1时函数drawContours()是按怎样的规律绘制轮廓
5星 · 资源好评率100%
### 回答1:
drawContours 函数的结果可以保存在一个 Mat 类型的变量中,例如:
Mat result;
drawContours(image, contours, -1, Scalar(0, 255, 0), 2);
result = image.clone();
其中,image 是原始图像,contours 是轮廓信息,Scalar(0, 255, 0) 是轮廓线的颜色,2 是轮廓线的宽度。最后,将结果保存在 result 变量中,可以进行后续的处理或显示。
### 回答2:
drawContours函数的结果可以通过以下方式进行保存:
1. 保存为图像文件:可以将drawContours函数绘制的轮廓保存为图像文件,常见的图像文件格式有JPEG、PNG、BMP等。可以使用OpenCV库提供的imwrite函数来实现保存操作,例如:
```cpp
cv::imwrite("contours.jpg", image); // 将绘制结果保存为名为contours.jpg的图像文件
```
2. 保存为矩形框:可以通过boundingRect函数获取轮廓的最小外接矩形,然后将矩形的相关信息保存下来。boundingRect函数返回一个Rect对象,包含了矩形的位置和尺寸信息。
```cpp
cv::Rect rect = cv::boundingRect(contour); // 获取轮廓的最小外接矩形
// 保存矩形的位置和尺寸信息
int x = rect.x;
int y = rect.y;
int width = rect.width;
int height = rect.height;
// 保存矩形的信息可以使用自定义的数据结构或者其他方式进行存储
```
3. 保存为轮廓点集:可以将绘制轮廓所使用的点集保存下来,每个点包含x和y坐标信息。可以使用vector容器来保存点集,将每个点作为一个二维坐标对存储在vector中。
```cpp
std::vector<cv::Point> contourPoints; // 创建一个存储轮廓点集的vector
// 将绘制轮廓函数所使用的点集保存到vector中
for (int i = 0; i < contours.size(); i++) {
for (int j = 0; j < contours[i].size(); j++) {
contourPoints.push_back(contours[i][j]);
}
}
// 保存轮廓点集可以使用自定义的数据结构或者其他方式进行存储
```
综上所述,我们可以通过保存为图像文件、保存为矩形框或保存为轮廓点集的方式来保存drawContours函数的结果。具体选择哪种方式取决于应用的需求以及后续的处理和使用方式。
### 回答3:
drawContours 函数是 OpenCV 库中用于绘制轮廓的函数。所绘制的轮廓通常是基于二值图像进行绘制的。
drawContours 函数的结果可以通过以下方式保存:
1. 在原始图像上绘制轮廓:可以将原始图像作为绘制轮廓的背景,然后使用 drawContours 函数将轮廓绘制在原始图像上。此时,轮廓就会直接保存在原始图像上。
2. 创建新的同样大小的图像存储轮廓:可以创建一个与原始图像大小相同的新图像,然后使用 drawContours 函数将轮廓绘制在新图像上。这样,轮廓就会保存在新图像中,而不会影响原始图像。
3. 将轮廓信息保存为数据结构:OpenCV 中的轮廓被保存为一个轮廓向量(vector),其中每个轮廓都表示为一个点的集合。可以通过将轮廓向量保存到文件或在内存中进行操作来保存 drawContours 函数的结果。
4. 根据需要进行进一步处理:绘制轮廓后,可以根据需要进行进一步处理,例如计算轮廓的面积、周长或中心点等。这些处理结果可以保存在变量中,并根据需要进行使用。
综上所述,drawContours 函数的结果可以通过在原始图像上绘制轮廓、创建新图像存储轮廓、将轮廓信息保存为数据结构或根据需要进行进一步处理来保存。
阅读全文