Введение 7
Часть I. Загрузка изображения
11
Глава 1. Первые шаги 13
1.1. Установка OpenCV 13
1.2. Настройка редактора Eclipse 15
1.3. Вспомогательные классы 22
1.3.1. Класс Point: точка 22
1.3.2. Класс Point3: 3D-точка 24
1.3.3. Класс Size: размеры прямоугольной области 25
1.3.4. Класс Rect: прямоугольная область 26
1.3.5. Класс RotatedRect: повернутая прямоугольная область 29
1.3.6. Класс Scalar: объект из четырех элементов 31
1.3.7. Класс Range: диапазон 33
Глава 2. Матрицы
35
2.1. Класс Mat: матрица 35
2.1.1. Создание матрицы 35
2.1.2. Размеры матрицы 40
2.1.3. Тип элементов 41
2.1.4. Доступ к элементам 46
2.1.5. Получение диапазона значений 47
2.1.6. Создание копии матрицы 54
2.1.7. Транспонирование матрицы 56
2.1.8. Изменение структуры матрицы 57
2.1.9. Удаление матрицы 58
2.2. Изменение значений матрицы 59
2.2.1. Изменение сразу всех значений 63
2.2.2. Сложение 65
2.2.3. Вычитание 67
2.2.4. Умножение 68
2.2.5. Деление 69
2.2.6. Вычисление квадратного корня 70
2.2.7. Возведение в степень 71
2.2.8. Вычисление натурального логарифма и экспоненты 71
2.2.9. Использование таблицы соответствия 71
2.2.10. Нормализация и вычисление нормы 73
2.2.11. Побитовые операции 74
2.3. Поиск минимального, максимального и среднего значений 76
2.4. Вычисление суммы элементов 79
2.5. Заполнение матрицы случайными числами 80
2.6. Сортировка элементов матрицы 81
2.7. Сравнение элементов 83
2.8. Прочие методы 84
2.9. Классы MatOfByte, MatOfInt, MatOfFloat и MatOfDouble 86
2.10. Классы MatOfPoint, MatOfPoint3 и MatOfRect 88
Глава 3. Создание и преобразование изображений
91
3.1. Загрузка изображения из файла 91
3.2. Сохранение изображения в файл 94
3.3. Преобразование матрицы в массив и обратно 96
3.4. Преобразование цветового пространства 98
3.4.1. Преобразование BGR в оттенки серого 98
3.4.2. Преобразование BGR в RGB 99
3.4.3. Добавление или удаление альфа-канала 100
3.4.4. Преобразование BGR в HSV 100
3.4.5. Преобразование BGR в HLS 101
3.4.6. Преобразование BGR в Lab 102
3.5. Изменение типа изображения 103
3.5.1. Преобразование типа CV_8U в CV_32F 103
3.5.2. Преобразование типа CV_16U в CV_32F 103
3.5.3. Преобразование типа CV_8U в CV_16U 104
3.6. Преобразование Mat в BufferedImage 104
3.7. Преобразование Mat в WritableImage 106
3.8. Сохранение матрицы в бинарный файл 109
3.9. Класс CvUtils и шаблон приложения JavaFX 111
3.10. Чтение кадров из видеофайла 115
3.11. Захват кадров с веб-камеры 118
Часть II. Анализ и обработка изображения
125
Глава 4. Рисование фигур и вывод текста на изображение
127
4.1. Указание цвета 127
4.2. Рисование линии 129
4.3. Рисование стрелки 130
4.4. Рисование прямоугольника 132
4.5. Рисование круга 133
4.6. Рисование эллипса, дуги или сектора 134
4.7. Рисование ломаной линии и многоугольника 137
4.8. Вывод текста на изображение 141
4.9. Создание рамки 144
4.10. Вставка одного изображения в другое 147
4.11. Наложение одного изображения на другое 148
4.12. Рисование маркеров 149
Глава 5. Трансформация изображения
151
5.1. Разделение изображения на отдельные каналы 151
5.2. Создание зеркального отражения 154
5.3. Объединение нескольких изображений 155
5.4. Повтор изображения по горизонтали и вертикали 156
5.5. Изменение размеров изображения 156
5.6. Аффинные преобразования 159
5.6.1. Смещение, масштабирование и сдвиг 159
5.6.2. Вращение 162
5.7. Трансформация перспективы 166
Глава 6. Изменение значений компонентов цвета
169
6.1. Преобразование цветного изображения в черно-белое 169
6.2. Изменение яркости и насыщенности 175
6.3. Изменение цветового баланса 176
6.4. Изменение контраста 177
6.5. Создание негатива изображения 179
6.6. Сепия 180
6.7. Вычисление гистограммы 181
6.8. Автоматическое выравнивание гистограммы изображения в градациях серого 184
6.9. Класс CLAHE 187
6.10. Метод applyColorMap() 189
Глава 7. Применение фильтров
193
7.1. Размытие и подавление цифрового шума 193
7.1.1. Метод blur(): однородное сглаживание 194
7.1.2. Размытие по Гауссу 195
7.1.3. Метод bilateralFilter(): двустороннее сглаживание 196
7.1.4. Метод adaptiveBilateralFilter() 197
7.1.5. Медианный фильтр 198
7.1.6. Метод boxFilter() 199
7.2. Методы filter2D() и sepFilter2D() 200
7.3. Методы dilate() и erode() 202
7.4. Метод morphologyEx() 204
7.5. Гауссовы пирамиды 207
7.6. Вычисление градиентов изображения 208
7.6.1. Методы Sobel() и Scharr() 208
7.6.2. Метод Laplacian() 214
7.7. Фильтр Габора 215
7.8. Повышение резкости 217
Часть III. Компьютерное зрение
221
Глава 8. Поиск объектов
223
8.1. Поиск контуров 223
8.1.1. Метод Canny(): выделение границ 223
8.1.2. Метод findContours(): поиск контуров 225
8.1.3. Метод drawContours(): отрисовка контура 226
8.1.4. Основные методы для работы с контурами 228
8.1.5. Сравнение контуров 231
8.2. Поиск объекта по цвету 236
8.3. Вычитание фона из текущего кадра 237
8.4. Поиск объекта по шаблону 240
8.5. Поиск прямых линий и кругов 241
8.6. Класс LineSegmentDetector 244
Глава 9. Сегментация изображения
247
9.1. Метод watershed() 247
9.2. Метод pyrMeanShiftFiltering() 249
9.3. Метод floodFill() 251
9.4. Метод grabCut() 253
9.5. Метод kmeans() 256
Глава 10. Поиск особых точек
259
10.1. Поиск углов 259
10.1.1. Детектор углов Харриса 259
10.1.2. Метод cornerMinEigenVal() 260
10.1.3. Метод preCornerDetect() 262
10.1.4. Метод goodFeaturesToTrack() 263
10.1.5. Уточнение местоположения углов 265
10.2. Поиск ключевых точек 266
10.2.1. Класс KeyPoint 266
10.2.2. Класс MatOfKeyPoint 268
10.2.3. Отрисовка ключевых точек 270
10.2.4. Класс FeatureDetector 272
10.3. Сравнение ключевых точек 275
10.3.1. Класс DescriptorExtractor 276
10.3.2. Класс DMatch 277
10.3.3. Класс MatOfDMatch 278
10.3.4. Отрисовка найденных совпадений 281
10.3.5. Класс DescriptorMatcher 282
10.4. Создание панорамы 287
10.5. Класс Feature2D 291
Глава 11. Каскады Хаара
295
11.1. Класс CascadeClassifier 295
11.2. Поиск лиц 297
11.3. Поиск глаз 298
11.4. Поиск улыбки 300
11.5. Поиск носа 301
Заключение 305
Приложение. Описание электронного архива 306
Предметный указатель