![Мультимедийное Программирование OpenCV](/covers/70924117.jpg)
Полная версия:
Мультимедийное Программирование OpenCV
![](/img/70924117/cover.jpg)
Serdar Orazdurdyyev
Мультимедийное Программирование OpenCV
Мультимедийное программирование
![](/img/70924117/_0.jpg)
07.15.2019
Профессор: Orazdurdyyev Serdar Begnarlyevich
Внедрение цифровой обработки изображений / Introduction of Digital Image Processing
Выборка и квантование / Sampling and Quantization
![](/img/70924117/_1.jpg)
Continuous Tone Image – Непрерывное тональное изображение
Sampled Image – Пример изображения
Sampled and Quandtized Image – Выборочное и квантованное изображение
Sampler – образец
Quantizer – Квантизатор
Аналого-цифровое преобразование / Analog to Digital Conversion
![](/img/70924117/_2.jpg)
(a) Analog Signal – Аналоговый сигнал
(b) Sampling – Выборка
(c) Quantization – Квантование
(d) Coding – Кодирование
TS: Sampling Period – Период выборки
Происхождение изображения / Image Origin
Upper-left corner of image – Левый верхний угол изображения
Pixels – Пиксели
Lines – Линии
![](/img/70924117/_3.jpg)
Изменение яркости изображения / Image Brightness Variation
![](/img/70924117/_4.jpg)
![](/img/70924117/_5.jpg)
Brightness – Яркость
Distance – Расстояние
Шаги яркости изображения / Image Brightness Steps
![](/img/70924117/_6.jpg)
![](/img/70924117/_7.jpg)
(a) 8 Steps : 3 bits (b) 16 Steps : 4 bits
(а) 8 шагов: 3 бита (б) 16 шагов: 4 бита
![](/img/70924117/_8.jpg)
![](/img/70924117/_9.jpg)
(c) 32 Steps : 5 bits (d) 64 Steps : 6 bits
(c) 32 шагов: 5 бит (d) 64 шагов: 6 бит
![](/img/70924117/_10.jpg)
![](/img/70924117/_11.jpg)
(e) 128 Steps : 7 bits (f) 256 Steps : 8 bits
(e) 128 шагов: 7 бит (f) 256 шагов: 8 бит
Яркость изображения Разрешение / Image Brightness Resolution
![](/img/70924117/_12.jpg)
![](/img/70924117/_13.jpg)
![](/img/70924117/_14.jpg)
![](/img/70924117/_15.jpg)
![](/img/70924117/_16.jpg)
![](/img/70924117/_17.jpg)
![](/img/70924117/_18.jpg)
![](/img/70924117/_19.jpg)
Световой спектр / Light Spectrum
![](/img/70924117/_20.jpg)
WHITE LIGHT / БЕЛЫЙ СВЕТ
INFRARED / ИНФРАКРАСНЫЙ
ULTRAVIOLET / УЛЬТРАФИОЛЕТ
OPTICAL PRISM / ОПТИЧЕСКАЯ ПРИЗМА
Табличка I. Цветовой спектр, видимый при прохождении белого света через призму. (С разрешения General Electric Co., подразделения по производству ламп.) / Plate I. Color spectrum seen by passing white light a prism. (Courtesy of General Electric Co., Lamp Business Division.)
COSMIC RAYS / КОСМИЧЕСКИЕ ЛУЧИ
GAMMA RAYS / ГАММА ИЗЛУЧЕНИЕ
X-RAYS / X-ЛУЧИ
INFRARED / ИНФРАКРАСНЫЙ
MICRO-WAVES / МИКРОВОЛНЫ
RADIO / РАДИО
ELECTRIC POWER / ЭЛЕКТРОЭНЕРГИЯ
ULTRAVIOLET / УЛЬТРАФИОЛЕТ
VISIBLE SPECTRUM / ВИДИМЫЙ СПЕКТР
INFRARED / ИНФРАКРАСНЫЙ
Смеси света и пигментов / Mixtures of Light and Pigments
![](/img/70924117/_21.jpg)
RGB Color – Цвет RGB
MIXTURES OF LIGHT (Additive primaries)
СМЕСИ СВЕТА (Аддитивные праймериз)
RED – КРАСНЫЙ
YELLOW – ЖЕЛТЫЙ
GREEN – ЗЕЛЕНЫЙ
CYAN – ГОЛУБОЙ
WHITE – БЕЛЫЙ
BLUE – СИНИЙ
MAGENTA – ПУРПУРНЫЙ
MIXTURES OF PIGMENTS СМЕСИ ПИГМЕНТОВ
(Subtractive primaries) (Субтрактивные праймериз)
![](/img/70924117/_22.jpg)
CMY(K) Color / (CMYK) Цвет
RED – КРАСНЫЙ
YELLOW – ЖЕЛТЫЙ
GREEN – ЗЕЛЕНЫЙ
CYAN – ГОЛУБОЙ
BLACK – ЧЕРНЫЙ
BLUE – СИНИЙ
MAGENTA – ПУРПУРНЫЙ
Изображение R, G, B / R, G, B Image
![](/img/70924117/_23.jpg)
![](/img/70924117/_24.jpg)
Исходное изображение (Original Image) Красный компонент (Red Component)
![](/img/70924117/_25.jpg)
![](/img/70924117/_26.jpg)
Зеленый компонент (Green Component) Синий компонент (Blue Component)
Тип цифрового изображения / A Type of Digital Image
![](/img/70924117/_27.jpg)
(а) Цветное изображение (Color Image)
(b) Изображение с уровнем серого (Gray Level Image)
(c) Двоичное изображение (Binary Image)
Тип цифрового изображения / A Type of Digital Image
![](/img/70924117/_28.jpg)
(a) Двоичное изображение / Binary Image
![](/img/70924117/_29.jpg)
(b) Изображение с уровнем серого / Gray Level Image
Тип цифрового изображения / A Type of Digital Image
![](/img/70924117/_30.jpg)
Цветное изображение (Color Image)
2. Введение OpenCV (Introduction of OpenCV)
OpenCV?
●
OpenCV – библиотека компьютерного зрения с открытым исходным кодом
– Библиотека с открытым исходным кодом для обработки изображений
и компьютерного зрения
– Состоит из более чем 2500 алгоритмов
– Поддержка интерфейсов C, C++, Python, Matlab.
– Поддержка операционных систем для Windows, Linux, Android, Mac
OS и т. д.
– Быстрая реализация алгоритма с использованием инструкций MX
(MultiMedia eXtension) и SSE (потоковые расширения SIMD).
– Разработка интерфейса CUDA и OpenCL
Установка OpenCV / OpenCV Install
•
Условия для программирования OpenCV с использованием C ++ (для ОС Windows)
–
На вашем компьютере должна быть установлена 64-битная ОС Windows. (OpenCV поддерживает только 64-битные ОС)
–
Visual Studio 2017 должен быть установлен как инструмент редактора программ для программирования на C ++. (Последняя версия Visual Studio – 2019, но в настоящее время поддерживает только OpenCV для Visual Studio 2017.)
① Установка сообщества Visual Studio 2017.
(① Visual Studio Community 2017 Install)
●
https://visualstudio.microsoft.com/ru/free-developer-offers/
![](/img/70924117/_31.jpg)
•
На официальном сайте выше можно загрузить только последнюю версию 2019 года, поэтому вы можете найти версию 2017 года с помощью веб-поиска и загрузки.
•
30-дневная ознакомительная версия, затем зарегистрируйтесь в Microsoft, войдите в Visual Studio и продолжайте использовать ее бесплатно
② Загрузка OpenCV (OpenCV Download)
•
http://opencv.org
> Releases
•
После загрузки установочного файла, дважды щелкните файл exe для установки
![](/img/70924117/_32.jpg)
③ Add to “System Environment Path” of Windows
•
Зарегистрируйте место установки OpenCV в «Путь к системной среде» Windows
•
Если вы установили диск C следующим образом, добавьте следующее в Path
•
C:\OpenCV\build\x64\vc15\bin
![](/img/70924117/_33.jpg)
Настройка OpenCV для Visual Studio 2017
(OpenCV Setup of Visual Studio 2017)
![](/img/70924117/_34.jpg)
![](/img/70924117/_35.jpg)
![](/img/70924117/_36.jpg)
![](/img/70924117/_37.jpg)
![](/img/70924117/_38.jpg)
Проверьте, что Debug mode(режим отладки) в настоящее время включен !!!
![](/img/70924117/_39.jpg)
![](/img/70924117/_40.jpg)
![](/img/70924117/_41.jpg)
![](/img/70924117/_42.jpg)
![](/img/70924117/_43.jpg)
![](/img/70924117/_44.jpg)
![](/img/70924117/_45.jpg)
![](/img/70924117/_46.jpg)
![](/img/70924117/_47.jpg)
![](/img/70924117/_48.jpg)
![](/img/70924117/_49.jpg)
![](/img/70924117/_50.jpg)
![](/img/70924117/_51.jpg)
Режим отладки → opencv_worldxxxd.lib
(Режим выпуска → opencv_worldxxx.lib)
Debug mode → opencv_worldxxxd.lib
(Release mode → opencv_worldxxx.lib)
![](/img/70924117/_52.jpg)
![](/img/70924117/_53.jpg)
![](/img/70924117/_54.jpg)
●
Имя → OpenCV410_x64_v15_
отлаживать
Name → OpenCV410_x64_v15_debug
●
Местоположение → Папка сохранения программы OpenCV (помните!!!)
Location → OpenCV program saving folder (remember!!!)
![](/img/70924117/_55.jpg)
•
При использовании Visual Studio в Release mode(режиме выпуска)
–
Запустите проект> Свойства в Main Menu
![](/img/70924117/_56.jpg)
–
Выполните то же самое содержание на страницах с 24 по 30
Release mode → opencv_worldxxx.lib
(Режим выпуска → opencv_worldxxx.lib)
![](/img/70924117/_57.jpg)
![](/img/70924117/_58.jpg)
![](/img/70924117/_59.jpg)
•
Имя → OpenCV410_x64_v15_release
Name → OpenCV410_x64_v15_release
•
Местоположение → Папка сохранения программы OpenCV (помните!!!)
Location → OpenCV program saving folder (remember!!!)
![](/img/70924117/_60.jpg)
Пример программы OpenCV / OpenCV Sample Program
•
запись OpenCV Sample Program
![](/img/70924117/_61.jpg)
•
Ввод имени программы C++… → ???.cpp
C++ program name typing… → ???.cpp
![](/img/70924117/_62.jpg)
![](/img/70924117/_63.jpg)
![](/img/70924117/_64.jpg)
![](/img/70924117/_65.jpg)
#include
пустая функция()
{
cv::Mat image(300, 400, CV_8UC1, cv::Scalar(200));
cv::imshow("Просмотр изображений", image);
резюме::waitKey (0);
}
#include
void main()
{
cv::Mat image(300, 400, CV_8UC1, cv::Scalar(200));
cv::imshow("Image Viewer", image);
cv::waitKey(0);
}
![](/img/70924117/_66.jpg)
•
Ошибка → установка x64!! / Error → x64 setting!!
![](/img/70924117/_67.jpg)
![](/img/70924117/_68.jpg)
•
Ctrl+F5: запустить без отладки. / Ctrl+F5 : Start without Debugging
![](/img/70924117/_69.jpg)
Выход (Результат) / Output (Result)
![](/img/70924117/_70.jpg)
3. OpenCV Classes
Точка_Класс / Point_ Class
•
Шаблонный класс (template class) для представления позиций width (ширины) и height (высоты) в двухмерных координатах (2 Dimension coordinate).
![](/img/70924117/_71.jpg)
•
(Объявление класса Point_( Declaration of Point_ Class)
Point_
Point_
Point_
•
Бывший)
Ex)
Point_
Point_
Point_
Point pt4(120, 69);
Point2f pt5(0.3f, 0.f), pt6(0.f, 0.4f);
Point2d pt7(0.25, 0.6);
Размер_Класс / Size_ Class
•
Шаблонный класс(template class), который определяет размер изображения(image) или прямоугольника(rectangle).
![](/img/70924117/_72.jpg)
•
Объявление класса Size_ (Declaration of Size_ Class)
Size_
Size_
Size_
•
Бывший)
•
Ex)
Size_
Size_
Size_
Size sz4(120, 69);
Size2f sz5(0.3f, 0.f);
Size2d sz6(0.25, 0.6);
Прямой_класс / Rect_ Class
•
класс шаблона для представления rectangle(прямоугольников)
•
((Начальная точка_x, Начальная точка_y), (Конечная точка_x, Конечная точка_y))
•
((Начальная точка_x, Начальная точка_y), Ширина, Высота)
![](/img/70924117/_73.jpg)
•
Объявление класса Rect_ (Declaration of Rect_ Class)
Rect_
Rect_
Rect_
•
Бывший)
•
Ex)
Size2d sz(100.5, 60.6);
Point2f pt1(20.f, 30.f), pt2(100.f, 200.f);
Rect_
// column, row, width, height
Rect_
Rect_
Век-класс / Vec Class
•
Шаблонный класс(template class) для вектора(Vector) чисел с небольшим количеством элементов.
•
Укажите data type(тип данных) и количество element(элементов) между < и >.
Vec
Vec
Vec
Vec
•
Ex)
Vec
Vec
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_
•
Ex)
Scalar_
Scalar_
Scalar_
Scalar_
Мат Класс / Mat Class
•
Класс(class), используемый для представления image(изображения).
•
Mat (строки, столбцы, тип, скаляр (rows, cols, type, Scalar))
строки: размер строки (rows: row size)
столбцы: размер столбца (cols : column size)
тип: тип данных (type : data type)
Скаляр: матричное значение (Scalar : matrix value)
![](/img/70924117/_74.jpg)
#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;
}
![](/img/70924117/_75.jpg)
![](/img/70924117/_76.jpg)
#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;
}
![](/img/70924117/_77.jpg)
#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.push_back(Point(10, 20));
v1.push_back(Point(20, 30));
v1.push_back(Point(50, 60));
vector
Size arr_size[] = { Size(2, 2), Size(3, 3), Size(4, 4) };
int arr_int[] = { 10, 20, 30, 40, 50 };
vector
vector
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;