opencv矩陣的基本運算

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]
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章