使用vector初始化opencv mat
时间: 2024-09-13 13:11:42 浏览: 44
在OpenCV中,`Mat`是一个用于表示图像或矩阵的数据结构,而`std::vector`通常用于动态数组。如果你想用`std::vector`的内容初始化一个`cv::Mat`,你可以这样做:
```cpp
#include <opencv2/opencv.hpp>
#include <iostream>
int main() {
// 假设我们有一个二维整数类型的vector
std::vector<std::vector<int>> vec = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
// 创建一个与vec维度相同的Mat
cv::Mat mat(vec.size(), cv::Size(3), CV_32SC1, vec[0].data());
// 注意:如果你的vector元素不是基本类型(如int),可能需要进行适当的转换(例如使用reinterpret_cast)
// 这里假设vec中的所有元素都是int,否则需要根据实际情况调整
// 现在mat包含了vector的内容
for (size_t i = 0; i < mat.rows; ++i) {
for (size_t j = 0; j < mat.cols; ++j) {
std::cout << mat.at<int>(i, j) << " ";
}
std::cout << "\n";
}
return 0;
}
```
在这个例子中,我们首先创建了一个`std::vector<std::vector<int>>`,然后将其转换为`Mat`,使用`CV_32SC1`标志表示这是一个单通道、32位浮点类型的矩阵。`mat[0].data()`获取了第一个子向量的指针,然后传递给`Mat`构造函数。
阅读全文