opencv矩阵的基本运算

来源:互联网 发布:notepad 配置php 编辑:程序博客网 时间:2024/06/05 04:13

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:------------------210:------------------311:------------------[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:------------------023:------------------024:------------------3.1622825:------------------[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:------------------647:------------------448:------------------449:------------------[2, 0;  0, 2]50:------------------[0.70710677, 0;  0, 0.70710677]
0 0
原创粉丝点击