cv::Mat 转QVector<float>
时间: 2024-12-02 13:12:24 浏览: 42
`cv::Mat` 是 OpenCV(开源计算机视觉库)中用于表示图像数据的数据结构,它是一个多维数组。而 `QVector<float>` 是 Qt 库中的动态数组,专门用于存储单一类型的浮点数。将 `cv::Mat` 转换为 `QVector<float>` 的步骤通常需要两步:
1. 首先,你需要将 `cv::Mat` 中的像素值读取出来。如果你的 `cv::Mat` 是单通道的灰度图,你可以通过 `.data` 或者 `.ptr<uchar>(0)` 来获取像素数据的一维指针。如果它是彩色图,每个通道可能需要独立处理。
```cpp
cv::Mat imgMat;
// ...加载或创建图像
cv::Vec3b* imageData = static_cast<cv::Vec3b*>(imgMat.data);
int numPixels = imgMat.total() * imgMat.elemSize();
```
2. 然后,将这些像素值复制到 `QVector<float>` 中。由于 OpenCV 和 Qt 的数据类型映射可能不一致,你可能需要逐个转换像素值,例如 BGR 到 RGB 或者直接转换为灰度后再存储。
```cpp
QVector<float> qVector(numPixels);
for (int i = 0; i < numPixels; ++i) {
if (imgMat.channels() == 1) { // 灰度图
qVector[i] = static_cast<float>(*imageData++);
} else {
qVector[i * 3 + 0] = static_cast<float>(imageData[2]);
qVector[i * 3 + 1] = static_cast<float>(imageData[1]);
qVector[i * 3 + 2] = static_cast<float>(imageData[0]);
imageData += 3;
}
}
```
阅读全文
相关推荐



















