在OpenCV中,应该如何遍历Vector<Point>类型的对象覆盖的全部区域?
时间: 2024-11-27 17:08:51 浏览: 6
详解利用OpenCV提取图像中的矩形区域(PPT屏幕等)
在OpenCV库中,`std::vector<cv::Point>`是一个存储二维点集合的数据结构,通常用于表示图像中的兴趣点或其他几何特征。如果你想遍历这个向量并绘制出它们覆盖的全部区域,你可以按照以下步骤操作:
1. 首先,创建一个`cv::Mat`实例,通常是和你的输入图像大小相同的黑色背景,用于记录覆盖区域。
```cpp
cv::Mat outputImage = cv::Mat::zeros(inputImage.size(), CV_8UC1);
```
这里`CV_8UC1`表示单通道的8位无符号整数类型。
2. 使用一个循环遍历`std::vector<cv::Point>`,在每个点的位置设置白色像素(例如值为255),表示该点所在的区域。
```cpp
for (const auto& point : points) {
outputImage.at<uchar>(point.y, point.x) = 255;
}
```
`at()`函数用于获取或设置矩阵元素的值,`uchar`指定了我们想要修改的是单通道的8位数据。
3. 最后,你可以显示原始图像和处理后的图像来查看结果,或者直接保存到文件。
```cpp
cv::imshow("Original", inputImage);
cv::imshow("Covered Area", outputImage);
cv::waitKey();
cv::imwrite("covered_area.png", outputImage);
```
阅读全文