Литмир - Электронная Библиотека

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

Мультимедийное Программирование OpenCV - _77.jpg

• 

Matexp mul

(input matrix):

Выполнить

поэлементное

(element-wise)

умножение

двух

матриц

• 

Matexp t

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

• 

Одновременные уравнения

(simultaneous equation)

Мультимедийное Программирование OpenCV - _78.jpg

#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 m1(2, 2, CV_8U);

m1(0, 0) = -50; // -> 206

m1(0, 1) = 300; // -> 44

m1(1, 0) = saturate_cast<uchar>(-50);

m1(1, 1) = saturate_cast<uchar>(300);

4. Пользовательские интерфейсы OpenCV

(OpenCV User Interfaces)

Контрольние виндов / Window Control

• 

Named Window (winname, flags) : Устанавливает имя window и создает window с этим именем

– 

flags : Изменение размера window

Мультимедийное Программирование OpenCV - _79.jpg

• 

imshow (): отображает матрицу "mat" как окно в окне winname

• 

destroyWindow (): удаляет указанное окно с экрана

• 

destroyAllWindows (): удалить все видимые окна

• 

moveWindow (x, y): переместить окно winname в указанную позицию (x (столбец, y (строка))

#include <opencv2/opencv.hpp>

using namespace cv;

using namespace std;

int main()

{

Mat image1(300, 400, CV_8U, Scalar(255));

Mat image2(300, 400, CV_8U, Scalar(100));

string title1 = "white window control";

string title2 = "gray window control";

namedWindow(title1, WINDOW_AUTOSIZE);

namedWindow(title2, WINDOW_NORMAL);

moveWindow(title1, 100, 200);

moveWindow(title2, 300, 200);

imshow(title1, image1);

imshow(title2, image2);

waitKey();

destroyAllWindows();

return 0;

}

Контрольние событиями клавиатуры / Keyboard Event Control

• 

waitKey (delay, задержка): ожидает ввода ключа в течение времени задержки(delay), возвращает(return) значение клавиши, когда происходит событие клавиши,

– 

delay : время задержки. ms.

– 

delay <= 0 : Бесконечное ожидание, пока не произойдет ключевое событие

– 

delay > 0 : дождитесь ввода ключа в течение времени задержки. return (Возвращает) -1, если в течение времени задержки нет клавишного ввода

• 

Используйте waitKeyEx () для ввода клавиши со стрелкой (arrow key)

• 

Event (Событие) происходит только когда window active (активно).

Контрольние событиями мыши / Mouse Event Control

• 

Создать callback function (функцию обратного вызова) (event handler) (обработчик событий) для обработки событий мыши и зарегистрировать эту функцию в системе через setMouseCallback ()

Конец ознакомительного фрагмента.

Текст предоставлен ООО «Литрес».

Прочитайте эту книгу целиком, купив полную легальную версию на Литрес.

Безопасно оплатить книгу можно банковской картой Visa, MasterCard, Maestro, со счета мобильного телефона, с платежного терминала, в салоне МТС или Связной, через PayPal, WebMoney, Яндекс.Деньги, QIWI Кошелек, бонусными картами или другим удобным Вам способом.

5
{"b":"907633","o":1}