當前位置: 妍妍網 > 碼農

總結 | OpenCV4 Mat操作全接觸

2024-01-31碼農

點選上方 藍字 關註我們

微信公眾號: OpenCV學堂

關註獲取更多電腦視覺與深度學習知識

建立Mat

OpenCV中常見的建立Mat的方法主要有以下八種方法,演示程式碼如下:

Mat的常見操作

這些常見操作主要包括,ROI截取、行截取、列截取、矩陣乘法、矩陣轉置、矩陣點乘求和、矩陣乘法、矩陣reshape、矩陣求逆、forEach遍歷,相關的程式碼片段如下:

// create two Mat
Mat m1 = (Mat_<float>(34) << 1234, 5,6,7,810,11,12,1325,26,27,28);
Mat m2 = (Mat_<float>(23) << 123123);
std::cout << " m1 : \n" << m1 << std::endl;
std::cout << " m2 : \n" << m2 << std::endl;
// roi截取
Rect box(0022);
Mat roi = m1(box);
std::cout << " roi : \n" << roi << std::endl;
// 按行截取
Mat row1 = Mat(m1, Range(01), Range::all());
Mat row2 = Mat(m1, Range(12), Range::all());
std::cout << " row1 : \n" << row1 << std::endl;
std::cout << " row2 : \n" << row2 << std::endl;
// 按列截取
Mat col1 = Mat(m1, Range::all(), Range(01));
Mat col2 = Mat(m1, Range::all(), Range(12));
std::cout << " col1 : \n" << col1 << std::endl;
std::cout << " col2 : \n" << col2 << std::endl;
// 矩陣乘法
Mat m3 = m2 * m1;
std::cout << " m3 : \n" << m3 << std::endl;
// 矩陣轉置
Mat m3_t = m3.t();
std::cout << " m3_t : \n" << m3_t << std::endl;
// 矩陣點乘求和
Mat m4 = (Mat_<float>(23) << 421369);
double sum = m2.dot(m4);
std::cout << " sum(m2xm4) = " << sum << std::endl;
// 矩陣乘法
Mat m5 = m2.mul(m4);
std::cout << " m5(m2xm4) = " << m5 << std::endl;
// reshape
Mat m6 = m5.reshape(03);
std::cout << " m6(m5 reshape) = " << m6 << std::endl;
// 求逆
Mat m7 = (Mat_<float>(22) << 1234);
std::cout << " m7 = \n" << m7 << std::endl;
std::cout << " m7(inv) = \n" << m7.inv() << std::endl;
// i.e. pixels (x,y,z) = (1,2,3) is (b,g,r) = (1,2,3).
typedef cv::Point3_<uint8_t> Pixel;
// forEach方式的像素遍歷
image.forEach<Pixel>([](Pixel &p, constint * position) -> void {
p.x = 255 - p.x;
p.y = 255 - p.y;
p.z = 255 - p.z;
});










執行結果如下:

系統化學習直接掃碼檢視

推薦閱讀