第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;
}