Mat 数据读写
时间: 2023-09-10 08:07:54 浏览: 51
在 OpenCV 中,我们可以使用 `Mat` 类来表示图像或矩阵。`Mat` 对象包含了图像或矩阵的像素值和其他相关属性,如宽度、高度、通道数等。下面介绍如何对 `Mat` 对象进行数据读写。
## 读取图像数据
要读取图像数据,我们可以使用 `Mat::at` 方法,该方法可以访问 `Mat` 对象的像素值。例如,要读取 `(x, y)` 坐标处的像素值,可以使用以下代码:
```c++
uchar pixel = img.at<uchar>(y, x);
```
其中,`img` 是 `Mat` 对象,`uchar` 表示像素值的数据类型,`y` 和 `x` 分别表示像素的行坐标和列坐标。如果图像是彩色图像,需要访问三个通道的像素值,可以使用以下代码:
```c++
Vec3b pixel = img.at<Vec3b>(y, x);
uchar blue = pixel[0];
uchar green = pixel[1];
uchar red = pixel[2];
```
其中,`Vec3b` 表示像素值的数据类型,包含了三个 `uchar` 类型的通道,分别表示蓝色、绿色和红色通道。
## 写入图像数据
要写入图像数据,我们可以使用 `Mat::at` 方法,将像素值赋值给指定位置。例如,要将 `(x, y)` 坐标处的像素值设置为 `value`,可以使用以下代码:
```c++
img.at<uchar>(y, x) = value;
```
如果图像是彩色图像,需要设置三个通道的像素值,可以使用以下代码:
```c++
Vec3b pixel(value_blue, value_green, value_red);
img.at<Vec3b>(y, x) = pixel;
```
其中,`value_blue`、`value_green` 和 `value_red` 分别表示蓝色、绿色和红色通道的像素值。
## 保存图像数据
要保存图像数据,我们可以使用 `imwrite` 函数,将 `Mat` 对象保存为图像文件。例如,要将 `img` 保存为 `test.jpg` 文件,可以使用以下代码:
```c++
imwrite("test.jpg", img);
```
其中,第一个参数是保存的文件名,第二个参数是要保存的 `Mat` 对象。