读取 cv::mat 到float 数组中
时间: 2024-09-27 12:04:53 浏览: 19
在OpenCV(C++接口)中,`cv::Mat`是一个用于表示图像数据的数据结构,通常包含像素值。如果你想将`cv::Mat`的内容转换成浮点数数组(通常是单通道的),你可以按照以下步骤操作:
1. 首先,确保`cv::Mat`是连续的(即存储在同一块内存中),这对于高效地访问像素至关重要。可以使用`isContinuous()`函数检查这一点。
```cpp
if (img.isContinuous()) {
```
2. 获取`cv::Mat`的宽度、高度和通道数,以及它所占用的元素类型(例如,`CV_32F`代表32位单精度浮点数)。
```cpp
int width = img.cols;
int height = img.rows;
int channels = img.channels();
cv::DataType dtype = img.type();
```
3. 创建一个大小匹配的浮点数数组,通常是`std::vector<float>`或者直接是动态分配的数组。
```cpp
std::vector<float> floatArray(width * height * channels);
```
4. 使用`ptr`成员函数获取到`cv::Mat`的像素指针,然后复制像素值到新数组中。由于每个像素可能有多个通道(如RGB或BGR),你需要遍历它们并逐个复制。
```cpp
for (int i = 0; i < height; ++i) {
for (int j = 0; j < width; ++j) {
const uchar* pixelPtr = img.ptr<uchar>(i)[j];
for (int c = 0; c < channels; ++c) {
floatArray[(i * width + j) * channels + c] = static_cast<float>(pixelPtr[c]);
}
}
}
```