Читаем Мультимедийное Программирование OpenCV полностью

Rect_ rect2(pt1, pt2);

Rect_ rect3(Point2d(20.5, 10), sz);

Век-класс / Vec Class

• 

Шаблонный класс(template class) для вектора(Vector) чисел с небольшим количеством элементов.

• 

Укажите data type(тип данных) и количество element(элементов) между < и >.

Vec <==> Vec2b

Vec <==> Vec3i

Vec <==> Vec4f

Vec <==> Vec5d

• 

Ex)

Vec v1(5, 12);

Vec v2(40, 130.7, 125.6);

Vec2b v3(10, 10);

Vec6f v4(40.f, 230.25f, 525.6f);

Vec3i v5(200, 230, 250);

Скаляр_класс / Scalar_ Class

• 

Укажите четыре значения в качеств data type(типа данных), чтобы указать значение яркости pixel(пикселя)

• 

Сохраните

четыре

значения

Blue, Green, Red, Alpha(transparency).

• 

Установите в 0, если при инициализации

(Initialization) не указано значение

• 

Scalar_ <==> Scalar

• 

Ex)

Scalar_ red(0, 0, 255);

Scalar_ blue(255, 0, 0);

Scalar_ color1(500);

Scalar_ color2(100.f, 200.f, 125.9f);

Мат Класс / Mat Class

• 

Класс(class), используемый для представления image(изображения).

• 

Mat

(строки, столбцы, тип, скаляр (

rows

,

cols

,

type

,

Scalar

))

строки: размер строки (rows: row size)

столбцы: размер столбца (cols : column size)

тип: тип данных (type : data type)

Скаляр: матричное значение (Scalar : matrix value)

#include

using namespace cv;

using namespace std;

int main

{

float data[] = {

      1.2f, 2.3f, 3.2f,

      4.5f, 5.f, 6.5f,

};

Mat m1(2, 3, CV_8U);

Mat m2(2, 3, CV_8U, Scalar(300));

Mat m3(2, 3, CV_32F, data);

Size sz(2, 3);

Mat m4(Size(2, 3), CV_64F);

Mat m5(sz, CV_32F, data);

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

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

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

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

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

return 0;

}

#include

using namespace cv;

using namespace std;

int main

{

Mat m1(4, 3, CV_32FC3);

cout << “Dimension = " << m1.dims << endl;

cout << “Rows = " << m1.rows << endl;

cout << “Columns = " << m1.cols << endl << endl;

cout << “Channels = " << m1.channels << endl;

cout << “Data Type = " << m1.depth << endl;

cout << “Matrix Size = " << m1.size << endl << endl;

cout << “Total Data Number = " << m1.total << endl;

return 0;

}

#include

using namespace cv;

using namespace std;

int main

{

Mat m1(2, 3, CV_8U, 2);

Mat m2(2, 3, CV_8U, Scalar(10));

Mat m3 = m1 + m2;

Mat m4 = m2 – 6;

Mat m5 = m1;

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

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

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

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

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

m5 = 100;

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

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

return 0;

}

• Копирование исходной матрицы в другую матрицу / Copy original matrix to another matrix

• Матовый клон / Mat clone

• void copy To (матрица целей, матрица маски) / void copy To

(objective matrix, mask matrix)

– 

mask matrix : Копирование только ненулевых элементов (elemen)

• 

void convertTo

(objective matrix, data type)

– 

data type : data type, которые вы хотите изменить

#include

using 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

using namespace cv;

using namespace std;

int main

{

vector v1;

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

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

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

vector 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 v3(arr_size, arr_size + sizeof(arr_size) / sizeof(Size));

vector 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

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

– метод

• 

Перейти на страницу:

Похожие книги