opencv contours 转mat
时间: 2024-11-27 08:18:08 浏览: 0
在OpenCV中,Contours(轮廓)是一种表示图像中边缘像素连接的结构,通常用于形状检测和分析。当你从图像中提取了contours之后,它们通常是存储在一个`std::vector<std::vector<cv::Point>>`类型的变量中,每个内部的`cv::Point`列表代表轮廓上的一系列点。
如果你想将这些contours转换成MAT(矩阵)格式,可以按照以下步骤操作:
1. 首先,你需要一个空的MAT对象来保存结果,假设它的类型是CV_8UC1,因为contours通常只包含二进制信息,比如白色轮廓在黑色背景下。
```cpp
cv::Mat contourMat(height, width, CV_8UC1, cv::Scalar(0));
```
这里`height`和`width`应该设置为你想要的结果矩阵的尺寸,可以根据实际需求填充0或其他背景颜色。
2. 对于每个轮廓,你可以遍历其点,并将它们逐一点到新矩阵中。由于contours是以逆时针方向包围目标的,所以你可能会选择反向添加点,以便得到正确的顺序。以下是一个示例:
```cpp
for (const auto& contour : contours) {
std::reverse(contour.begin(), contour.end()); // 如果需要的话,反转轮廓点
for (int i = 0; i < contour.size(); ++i) {
int x = contour[i].x;
int y = contour[i].y;
contourMat.at<uchar>(y, x) = 255; // 将点设为白色,表示轮廓区域
}
}
```
这行代码会把轮廓内的像素值设为白色,外部像素保持原样(通常是黑色)。
阅读全文