第1章 创建Mat对象
1.1. 创建空的 Mat 对象
cv::Mat mat;
1.2. 创建灰度图像
// 创建一个 3 行 4 列、8位无符号单通道矩阵(相当于灰度图)
cv::Mat mat(3, 4, CV_8UC1);
1.3. 创建彩色图像
// 创建三通道矩阵(相当于彩色图像)
cv::Mat mat_color(480, 640, CV_8UC3);
CV_8UC1
:8位无符号,单通道(灰度图)CV_8UC3
:8位无符号,三通道(彩色图)CV_32FC1
:32位浮点数,单通道- 更多类型请参考
opencv2/core/types.hpp
1.4.
创建并初始化为特定值
// 初始化为全0矩阵
cv::Mat zeros = cv::Mat::zeros(3, 3, CV_8UC1);// 初始化为全1矩阵
cv::Mat ones = cv::Mat::ones(3, 3, CV_8UC1);// 初始化为单位矩阵
cv::Mat eye = cv::Mat::eye(3, 3, CV_32F);
1.5. 使用已有数据创建 Mat(不复制数据)
uchar data[] = {0, 1, 2, 3, 4, 5};
cv::Mat mat(2, 3, CV_8UC1, data);
1.6.从另一个 Mat 复制构造(深拷贝)
cv::Mat mat1 = cv::Mat::ones(3, 3, CV_8UC1);
cv::Mat mat2 = mat1.clone(); // 深拷贝,两个 Mat 独立
或者使用 copyTo
方法:
cv::Mat mat3;
mat1.copyTo(mat3);
1.7. 使用 std::vector
创建 Mat(适合数组处理)
std::vector<float> vec = {1.0f, 2.0f, 3.0f, 4.0f};
cv::Mat mat_vec = cv::Mat(vec).reshape(1, 2); // reshape 成 2x2 矩阵
1.8.从图像文件加载 Mat(读取图像)
cv::Mat img = cv::imread("image.jpg");
if (img.empty()) {std::cerr << "无法加载图像!" << std::endl;
}