Мультимедийное Программирование OpenCV
Шрифт:
#include <opencv2/opencv.hpp>
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;
}
•
• Матовый клон / 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 <opencv2/opencv.hpp>
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 <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;