Мультимедийное Программирование OpenCV. Serdar Orazdurdyyev. Читать онлайн. Newlib. NEWLIB.NET

Автор: Serdar Orazdurdyyev
Издательство: Автор
Серия:
Жанр произведения:
Год издания: 2024
isbn:
Скачать книгу
namespace cv;

      using namespace std;

      int main()

      {

      double data[] = {

            1.1, 2.2, 3.3, 4.4,

            5.5, 6.6, 7.7, 8.9,

            9.9, 10, 11, 12

      };

      Mat m1(3, 4, CV_64F, data);

      Mat m2 = m1.clone(); // copy m1 to m2

      Mat m3, m4;

      m1.copyTo(m3); // copy m1 to m3

      m1.convertTo(m4, CV_8U); // copy m1 to m4 converting to uchar

      cout << "[m1] =\n" << m1 << endl;

      cout << "[m2] =\n" << m2 << endl;

      cout << "[m3] =\n" << m3 << endl;

      cout << "[m4] =\n" << m4 << endl;

      return 0;

      }

      векторный класс / vector Class

      • 

      Контейнер последовательностей(Sequence Container) C++ STL(Standard Template Library)

      • 

      доступ к элементу(element access) вектора(vector) : используйте оператор индекса(subscript operator), [], как массив(array)

      • 

      vector() : конструктор(constructor)

      • 

      void push_back() : добавляет элемент в конец vector

      • 

      void pop_back() : удалить последний элемент

      #include <opencv2/opencv.hpp>

      using namespace cv;

      using namespace std;

      int main()

      {

      vector<Point> v1;

      v1.push_back(Point(10, 20));

      v1.push_back(Point(20, 30));

      v1.push_back(Point(50, 60));

      vector<float> v2(3, 9.25);

      Size arr_size[] = { Size(2, 2), Size(3, 3), Size(4, 4) };

      int arr_int[] = { 10, 20, 30, 40, 50 };

      vector<Size> v3(arr_size, arr_size + sizeof(arr_size) / sizeof(Size));

      vector<int> v4(arr_int + 2, arr_int + sizeof(arr_int) / sizeof(int));

      cout << "[v1] " << ((Mat)v1) << endl << endl;

      cout << "[v2] " << ((Mat)v2) << endl << endl;

      cout << "[v2] " << ((Mat)v2).reshape(1, 1) << endl;

      cout << "[v3] " << ((Mat)v3).reshape(1, 1) << endl;

      cout << "[v4] " << ((Mat)v4).reshape(1, 1) << endl;

      return 0;

      }

      Класс диапазона / Range class

      • 

      Используется в основном для указания диапазона row(строк) и column(столбцов) в классе Mat.

      • 

      Range(int start, int end)

      • 

      start(начало) в диапазоне, end(конец) не в диапазоне

      Функция операции с матрицей / Matrix Operation Function

      • 

      Matexp inv(метод): расчет обратной матрицы

      – метод

      • 

      Matexp inv(method) : inverse matrix calculation

      – method

      • 

      Matexp mul (input matrix): Выполнить поэлементное (element-wise) умножение двух матриц

      • 

      Matexp t () : вычислить транспонированную матрицу(transposed matrix)

      • 

      Одновременные уравнения (simultaneous equation)

      #include <opencv2/opencv.hpp>

      using namespace cv;

      using namespace std;

      int main()

      {

      float data[] = {

            1, 0, 2,

            -3, 2, 6,

            -1, -2, 3

      };

      float ans[] = {6, 30, 8};

      Mat m1(3, 3, CV_32F, data);

      Mat m2(1, 3, CV_32F, ans);

      Mat m2_t = m2.t();

      Mat m1_inv = m1.inv(DECOMP_LU);

      Mat x = m1_inv * m2_t;

      cout << "[m1] = " << endl << m1 << endl;

      cout << "[m1_inv] = " << endl << m1_inv << endl << endl;

      cout << "[m2(transposed)] = " << endl << m2_t << endl << endl;

      cout << “solution x1, x2, x3 = " << x.t() << endl;

      }

      насыщенный_ бросок < > / saturate_cast < >

      • 

      image data는 основном представляют собой кодированные(encoding) данные с 8 битами на канал.

      • 

      Поскольку он использует только 8bit, он имеет ограниченный диапазон значений пикселей (0 ~ 255).

      • 

      saturate_cast() template method : Когда значение сохраняется в 8-битном, если оно превышает 8-битный диапазон, оно сохраняется как 0 или 255

      • 

      Ex)

      Mat