opencv转成二维数组
时间: 2023-09-18 16:13:24 浏览: 122
在使用 OpenCV 时,我们通常会将图像读取为 `cv::Mat` 类型的对象。要将 `cv::Mat` 对象转换为二维数组,可以按照以下步骤进行操作:
1. 获取图像的行数和列数:
```cpp
int rows = img.rows;
int cols = img.cols;
```
2. 定义一个与图像大小相同的二维数组:
```cpp
int** array = new int*[rows];
for (int i = 0; i < rows; i++) {
array[i] = new int[cols];
}
```
3. 将图像中的像素值复制到二维数组中:
```cpp
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
array[i][j] = img.at<uchar>(i, j);
}
}
```
这里假设图像是灰度图像,如果是彩色图像,则 `img.at<cv::Vec3b>(i, j)` 返回的是一个包含三个值的向量,需要根据需要将其转换为单个值。
4. 访问二维数组中的像素值:
```cpp
int pixel_value = array[i][j];
```
5. 记得释放内存:
```cpp
for (int i = 0; i < rows; i++) {
delete[] array[i];
}
delete[] array;
```
完整的示例代码如下:
```cpp
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main() {
Mat img = imread("test.png", IMREAD_GRAYSCALE);
if (img.empty()) {
cout << "Failed to read image" << endl;
return -1;
}
int rows = img.rows;
int cols = img.cols;
int** array = new int*[rows];
for (int i = 0; i < rows; i++) {
array[i] = new int[cols];
}
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
array[i][j] = img.at<uchar>(i, j);
}
}
int pixel_value = array[10][20];
cout << "Pixel value at (10, 20): " << pixel_value << endl;
for (int i = 0; i < rows; i++) {
delete[] array[i];
}
delete[] array;
return 0;
}
```
阅读全文