cv::Mat 定义一个120*130的Mat
时间: 2024-09-11 14:17:47 浏览: 47
cv::Mat是OpenCV库中用于图像处理的一个重要类,它用于存储图像、矩阵和其他多维数组。在C++中,使用cv::Mat可以很方便地定义一个120x130的矩阵。下面是一个示例代码:
```cpp
#include <opencv2/opencv.hpp>
int main() {
// 创建一个120x130的矩阵,初始化所有元素为0
cv::Mat matrix(120, 130, CV_8UC1, cv::Scalar(0));
// 如果需要创建一个120x130的矩阵并用特定值初始化所有元素,比如1
// cv::Mat matrix(120, 130, CV_8UC1, cv::Scalar(1));
return 0;
}
```
在这段代码中,`cv::Mat`的构造函数接受几个参数:
- 第一个参数是矩阵的行数(120)。
- 第二个参数是矩阵的列数(130)。
- 第三个参数是矩阵的数据类型,`CV_8UC1`表示矩阵的每个元素是8位无符号整数,且矩阵是单通道的(灰度图)。
- 第四个参数`cv::Scalar(0)`用于指定初始化矩阵元素的值,这里设置为0。
如果要创建一个特定类型的数据(如双精度浮点数),可以将`CV_8UC1`更改为相应的类型标识符,例如`CV_64FC1`。
相关问题
std::vector<cv::Mat> channels(2); cv::Mat undistorted_points_temp = cv::Mat::ones(3, rows * cols, CV_64FC1); undistorted_points_temp = K.inv() * undistorted_points; cv::Mat undistorted_mat = cv::Mat::zeros(1, rows * cols, CV_64FC2); cv::s
std::vector<cv::Mat> channels(2);
cv::Mat undistorted_points_temp = cv::Mat::ones(3, rows * cols, CV_64FC1);
undistorted_points_temp = K.inv() * undistorted_points;
cv::Mat undistorted_mat = cv::Mat::zeros(1, rows * cols, CV_64FC2);
cv::split(undistorted_points_temp, channels);
cv::merge(channels, undistorted_mat);
以上代码实现了以下功能:
1. 定义了一个名为 channels 的 cv::Mat 类型的 vector,其大小为 2。
2. 创建了一个 3 行 rows*cols 列的 CV_64FC1 类型的矩阵 undistorted_points_temp,并将其所有元素初始化为 1。
3. 通过 K 的逆矩阵与 undistorted_points 相乘,得到一个新的矩阵 undistorted_points_temp。
4. 创建了一行 rows*cols 列的 CV_64FC2 类型的矩阵 undistorted_mat,并将其所有元素初始化为 0。
5. 将 undistorted_points_temp 矩阵拆分成多个通道,存储在名为 channels 的 vector 中。
6. 将 channels 中的通道合并成一个矩阵 undistorted_mat。
定义完cv::Mat后为什么说这个是cv::Mat::Mat
当你在OpenCV中定义一个`cv::Mat`对象时,实际上是创建了一个矩阵对象实例,该对象是`cv::Mat`类的一个实例。`cv::Mat::Mat`是一个构造函数,用于初始化一个新的`cv::Mat`对象,它可以接受多种参数,比如矩阵的维度、大小、类型等信息。例如:
```cpp
cv::Mat myMatrix(5, 5, CV_8UC3); // 创建一个5x5的RGB图像矩阵
// 或者
cv::Mat myMatrix = cv::imread("image.jpg"); // 从文件加载图像到矩阵
```
在这个例子中,`myMatrix`就是对`cv::Mat`类的一个实例化操作,并且通过`cv::Mat::Mat`构造函数指定了矩阵的初始状态。这个构造函数可以让你直接传递必要的参数来创建所需的矩阵。
阅读全文