opencv矩阵的基本运算

    xiaoxiao2021-12-14  40

    opencv矩阵的基本运算

    测试了基本的矩阵运算。快速掌握opencv矩阵操作

    #pragma once #include <opencv2\opencv.hpp> using namespace cv; template <class T> void o(int i, T mat) { std::cout << i << ":------------------\n" << mat << "\n"; } void test() { float data[4] = {1, 2, 3, 4}; Mat A = Mat::eye(2, 2, CV_32FC1); Mat B = Mat::ones(2, 2, CV_32FC1); Mat C = Mat::zeros(2, 2, CV_32FC1); Mat D = Mat::ones(3, 1, CV_32FC1); Mat E = Mat::ones(3, 1, CV_32FC1); Mat F = Mat::zeros(2, 2, CV_8SC1); Mat G =(Mat_<float>(2,2)<<0,-1,2,3); o(0, A + B + C); //矩阵加 o(1, A - B); //矩阵减 o(2, -B);//矩阵变符 o(3, 2 * B); //数矩阵乘 o(4, 99 - B); //数减矩阵 o(5, C * B); //矩阵乘法 o(6, A / B); //矩阵对应点除 o(7, 1 / B); //数除矩阵 o(8, D.cross(E)); //向量叉乘 o(9, A.dot(B)); //矩阵点乘 o(10, D.dot(E)); //向量点乘[double] A.convertTo(F, CV_8SC1); //类型转换 o(11, F); A = Mat(2, 2, CV_32FC1, data, 2 * sizeof(float)); B = Mat(2, 2, CV_32FC1, data, 8); //8为每行字节数 o(12, A.t()); //矩阵转置 flip(A, B, 0); o(13, B); //UD翻转 flip(A, B, -1); o(14, B); //LR + UD翻转 flip(A, B, 1); o(15, B); //LR翻转 cv::sqrt(A, B); o(16, B); //开方[double, float] A.resize(4, Scalar(1)); o(17, A);//矩阵变长 E.resize(7, Scalar(0)); o(18, E);//向量变长 o(19, sum(A)); //各通道求和 o(20, mean(A)); //各通道求平均 Mat I = A.col(1).clone(); o(21, I); // 复制第二列 o(22, determinant(C)); // 行列式 o(23, countNonZero(C)); // 非零个数 o(24, norm(B)); //矩阵的模 o(25, trace(B)); //矩阵的迹 transpose(B, C); o(26, C); //转置 exp(B, C); o(27, C); //指数运算 log(B, C); o(28, C); //对数运算 randu(C, Scalar::all(0), Scalar::all(255)); o(29, C); //随机 o(30, C.inv()); //求逆inv(int method=DECOMP_LU) o(31, C.inv(cv::DECOMP_CHOLESKY)); //求逆DECOMP_CHOLESKY(专门用于对称,速度是LU的2倍) abs(C); o(32, C); //绝对值 o(33, B < C); o(34, B != 1); //结果是CV_8UC1的mask的0或255 o(35, B | C); o(36, ~B); o(37, B & C); //逻辑运算 o(38, min(C, B)); o(39, min(A, 1)); o(40, max(C, B)); o(41, max(A, 1)); A.push_back(B); o(42, A); A.pop_back(A.rows/2); o(43, A); C.setTo(Scalar(20)); o(44, C); o(45, G); o(46, A.total()); o(47, A.elemSize()); o(48, A.elemSize1()); //返回元素的大小:CV_16SC3-->3*sizeof(short)-->6; //返回元素一个通道的大小CV_16SC3-->sizeof(short)-->2 setIdentity(G, Scalar(2)); o(49, G); normalize(G, G); o(50, G); //归一化 }

    输出结果

    0:------------------ [2, 1; 1, 2] 1:------------------ [0, -1; -1, 0] 2:------------------ [-1, -1; -1, -1] 3:------------------ [2, 2; 2, 2] 4:------------------ [98, 98; 98, 98] 5:------------------ [0, 0; 0, 0] 6:------------------ [1, 0; 0, 1] 7:------------------ [1, 1; 1, 1] 8:------------------ [0; 0; 0] 9:------------------ 2 10:------------------ 3 11:------------------ [1, 0; 0, 1] 12:------------------ [1, 3; 2, 4] 13:------------------ [3, 4; 1, 2] 14:------------------ [2, 1; 4, 3] 15:------------------ [1, 2; 3, 4] 16:------------------ [1, 1.4142135; 1.7320508, 2] 17:------------------ [1, 1.4142135; 1.7320508, 2; 1, 1; 1, 1] 18:------------------ [1; 1; 1; 0; 0; 0; 0] 19:------------------ [10.1463, 0, 0, 0] 20:------------------ [1.26828, 0, 0, 0] 21:------------------ [1.4142135; 2; 1; 1] 22:------------------ 0 23:------------------ 0 24:------------------ 3.16228 25:------------------ [3, 0, 0, 0] 26:------------------ [1, 1.7320508; 1.4142135, 2] 27:------------------ [2.7182817, 4.1132503; 5.6522336, 7.3890557] 28:------------------ [0, 0.34657359; 0.54930609, 0.69314718] 29:------------------ [135.22211, 50.811096; 102.27016, 207.6682] 30:------------------ [0.0090744747, -0.0022202919; -0.0044688978, 0.0059087989] 31:------------------ [0.0090744747, -0.0022202919; -0.0044688978, 0.0059087989] 32:------------------ [135.22211, 50.811096; 102.27016, 207.6682] 33:------------------ [255, 255; 255, 255] 34:------------------ [0, 255; 255, 255] 35:------------------ [1.#QNAN, 1.#QNAN; 1.#QNAN, 207.6682] 36:------------------ [-3.9999998, -3.1715727; -2.5358982, -1.9999999] 37:------------------ [3.7615819e-037, 9.4787326e-038; 3.0049906e-037, 2] 38:------------------ [1, 1.4142135; 1.7320508, 2] 39:------------------ [1, 1; 1, 1; 1, 1; 1, 1] 40:------------------ [135.22211, 50.811096; 102.27016, 207.6682] 41:------------------ [1, 1.4142135; 1.7320508, 2; 1, 1; 1, 1] 42:------------------ [1, 1.4142135; 1.7320508, 2; 1, 1; 1, 1; 1, 1.4142135; 1.7320508, 2] 43:------------------ [1, 1.4142135; 1.7320508, 2; 1, 1] 44:------------------ [20, 20; 20, 20] 45:------------------ [0, -1; 2, 3] 46:------------------ 6 47:------------------ 4 48:------------------ 4 49:------------------ [2, 0; 0, 2] 50:------------------ [0.70710677, 0; 0, 0.70710677]
    转载请注明原文地址: https://ju.6miu.com/read-969103.html

    最新回复(0)