Изучаем OpenCV 3. Разработка программ компьютерного зрения на C++ с применением библиотеки OpenCV
Покупка
Новинка
Тематика:
Программирование на C и C++
Издательство:
ДМК Пресс
Перевод:
Слинкин Алексей Александрович
Год издания: 2017
Кол-во страниц: 827
Возрастное ограничение: 12+
Дополнительно
Вид издания:
Практическое пособие
Уровень образования:
Дополнительное профессиональное образование
ISBN: 978-5-97060-471-7
Артикул: 714054.02.99
В книге приведено описание всей библиотеки OpenCV в ее современном воплощении на языке C++, включая средства машинного обучения в контексте компьютерного зрения.
OpenCV, насчитывающая свыше 500 функций, используется в самых разных коммерческих приложениях: охрана, обработка медицинских изображений, распознавание образов и лиц, робототехника, контроль качества продукции и др. Упражнения в конце каждой главы помогут проконтролировать усвоение знаний.
Издание предназначено разработчикам, научным сотрудникам, инженерам-робототехникам и энтузиастам-любителям.
Скопировать запись
Фрагмент текстового слоя документа размещен для индексирующих роботов
Адриан Кэлер, Гэри Брэдски Изучаем OpenCV 3
Adrian Kaehler & Gary Bradski Learning OpenCV 3 Computer Vision in C++ with the OpenCV Library Beijing • Boston • Farnham • Sebastopol • Tokyo
Адриан Кэлер, Гэри Брэдски Изучаем OpenCV 3 Разработка программ компьютерного зрения на C++ с применением библиотеки OpenCV Москва, 2017
УДК 004.932OpenCV ББК 32.972.13 К98 Кэлер А., Брэдски Г. К98 Изучаем OpenCV 3 / пер. с анг. А. А. Слинкина. – М.: ДМК Пресс, 2017. – 826 с.: ил. ISBN 978-5-97060-471-7 В книге приведено описание всей библиотеки OpenCV в ее современном воплощении на языке C++, включая средства машинного обучения в контексте компьютерного зрения. OpenCV, насчитывающая свыше 500 функций, используется в самых разных коммерческих приложениях: охрана, обработка медицинских изображений, распознавание образов и лиц, робототехника, контроль качества продукции и др. Упражнения в конце каждой главы помогут проконтролировать усвоение знаний. Издание предназначено разработчикам, научным сотрудникам, инженерам-робототехникам и энтузиастам-любителям. УДК 004.932OpenCV ББК 32.972.13 Authorized Russian translation of the English edition of Learning OpenCV 3, ISBN 9781491937990 © 2016 Adrian Kaehler, Gary Bradski This translation is published and sold by permission of O’Reilly Media, Inc., which owns or controls all rights to publish and sell the same. Все права защищены. Любая часть этой книги не может быть воспроизведена в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Материал, изложенный в данной книге, многократно проверен. Но поскольку вероятность технических ошибок все равно существует, издательство не может гарантировать абсолютную точность и правильность приводимых сведений. В связи с этим издательство не несет ответственности за возможные ошибки, связанные с использованием книги. ISBN 978-1-491-93799-0 (анг.) © 2017 Adrian Kaehler, Gary Bradski ISBN 978-5-97060-471-7 (рус.) © Оформление, издание, ДМК Пресс, 2017
Содержание Предисловие.................................................................................................................................16 Глава 1. Общие сведения...................................................................................................25 Что такое OpenCV?...........................................................................................................................25 Кто использует OpenCV?................................................................................................................26 Что такое компьютерное зрение?............................................................................................26 Истоки OpenCV..................................................................................................................................30 Архитектура OpenCV...................................................................................................................32 Ускорение OpenCV с помощью IPP.......................................................................................32 Кто является владельцем OpenCV?........................................................................................33 Скачивание и установка OpenCV.................................................................................................33 Установка..........................................................................................................................................33 Получение самой последней версии OpenCV из Git.............................................................36 Дополнительная документация по OpenCV.............................................................................36 Документация в комплекте поставки.....................................................................................36 Онлайновая документация и вики..........................................................................................36 Репозиторий предоставленного кода OpenCV........................................................................39 Скачивание и сборка предоставленных модулей...............................................................40 Переносимость....................................................................................................................................40 Резюме....................................................................................................................................................41 Упражнения..........................................................................................................................................41 Глава 2. Введение в OpenCV.............................................................................................42 Включаемые файлы...........................................................................................................................42 Ресурсы.............................................................................................................................................43 Первая программа – вывод изображения на экран................................................................43 Вторая программа – видео..............................................................................................................46 Перемотка вперед и назад................................................................................................................47 Простое преобразование..................................................................................................................51 Не столь простое преобразование................................................................................................52 Ввод с камеры......................................................................................................................................54 Запись в AVI-файл.............................................................................................................................55 Резюме....................................................................................................................................................56 Упражнения..........................................................................................................................................57 Глава 3. Знакомство с типами данных OpenCV................................................58 Типы данных OpenCV......................................................................................................................58 Обзор простых типов...................................................................................................................59 Простые типы: а теперь детали.................................................................................................60 Вспомогательные типы................................................................................................................66 Служебные функции....................................................................................................................73
6 Содержание Шаблонные структуры................................................................................................................79 Резюме....................................................................................................................................................80 Упражнения..........................................................................................................................................80 Глава 4. Типы изображений и больших массивов.........................................81 Динамические массивы переменного размера.........................................................................81 Класс cv::Mat: плотные N-мерные массивы.........................................................................81 Создание массива..........................................................................................................................82 Доступ к отдельным элементам массива...............................................................................86 N-арный итератор массива: NAryMatIterator......................................................................89 Доступ к блоку элементов массива.........................................................................................91 Матричные выражения: cv::Mat и алгебра...........................................................................92 Приведение с насыщением.........................................................................................................93 На что еще способны массивы .................................................................................................94 Класс разреженных массивов cv::SparseMat........................................................................95 Доступ к элементам разреженного массива.........................................................................96 Функции, уникальные для разреженных массивов..........................................................98 Шаблонные структуры для типов больших массивов.....................................................99 Резюме.................................................................................................................................................101 Упражнения.......................................................................................................................................101 Глава 5. Операции с массивами................................................................................103 Что еще можно делать с массивами..........................................................................................103 cv::abs()...........................................................................................................................................106 cv::absdiff()....................................................................................................................................106 cv::add()..........................................................................................................................................106 cv::addWeighted()........................................................................................................................107 cv::bitwise_and()..........................................................................................................................108 cv::bitwise_not()..........................................................................................................................109 cv::bitwise_or().............................................................................................................................109 cv::bitwise_xor()...........................................................................................................................109 cv::calcCovarMatrix()................................................................................................................. 110 cv::cartToPolar()............................................................................................................................111 cv::checkRange().......................................................................................................................... 112 cv::compare()................................................................................................................................. 112 cv::completeSymm().................................................................................................................... 113 cv::convertScaleAbs()................................................................................................................. 113 cv::countNonZero()..................................................................................................................... 114 cv::cvarrToMat().......................................................................................................................... 114 cv::dct()........................................................................................................................................... 115 cv::dft()............................................................................................................................................ 116 cv::cvtColor()................................................................................................................................ 117 cv::determinant().......................................................................................................................... 119 cv::divide().....................................................................................................................................120 cv::eigen().......................................................................................................................................120
Содержание 7 cv::exp()..........................................................................................................................................121 cv::extractImageCOI()...............................................................................................................121 cv::flip()...........................................................................................................................................121 cv::gemm()......................................................................................................................................121 cv::getConvertElem() и cv::getConvertScaleElem()..........................................................122 cv::idct()..........................................................................................................................................123 cv::idft()..........................................................................................................................................123 cv::inRange().................................................................................................................................124 cv::insertImageCOI()..................................................................................................................124 cv::invert()......................................................................................................................................124 cv::log()...........................................................................................................................................125 cv::LUT()........................................................................................................................................125 cv::magnitude().............................................................................................................................126 cv::Mahalanobis().........................................................................................................................126 cv::max().........................................................................................................................................127 cv::mean().......................................................................................................................................128 cv::meanStdDev()........................................................................................................................128 cv::merge()......................................................................................................................................129 cv::min()..........................................................................................................................................129 cv::minMaxIdx()...........................................................................................................................130 cv::minMaxLoc()..........................................................................................................................131 cv::mixChannels()........................................................................................................................131 cv::mulSpectrums()......................................................................................................................133 cv::multiply().................................................................................................................................133 cv::mulTransposed()....................................................................................................................133 cv::norm().......................................................................................................................................134 cv::normalize()...............................................................................................................................135 cv::perspectiveTransform()........................................................................................................136 cv::phase()......................................................................................................................................137 cv::polarToCart()..........................................................................................................................137 cv::pow().........................................................................................................................................138 cv::randu()......................................................................................................................................138 cv::randn()......................................................................................................................................139 cv::randShuffle()...........................................................................................................................139 cv::reduce()....................................................................................................................................139 cv::repeat().....................................................................................................................................140 cv::scaleAdd()................................................................................................................................141 cv::setIdentity()............................................................................................................................141 cv::solve().......................................................................................................................................141 cv::solveCubic()............................................................................................................................142 cv::solvePoly()...............................................................................................................................143 cv::sort()..........................................................................................................................................143 cv::sortIdx()...................................................................................................................................143 cv::split().........................................................................................................................................144 cv::sqrt()..........................................................................................................................................144
8 Содержание cv::subtract().................................................................................................................................145 cv::sum().........................................................................................................................................145 cv::trace()........................................................................................................................................146 cv::transform()...............................................................................................................................146 cv::transpose()...............................................................................................................................146 Резюме.................................................................................................................................................147 Упражнения.......................................................................................................................................147 Глава 6. Рисование и аннотирование....................................................................149 Рисование...........................................................................................................................................149 Линии и залитые многоугольники.......................................................................................149 Шрифты и текст..........................................................................................................................156 Резюме.................................................................................................................................................157 Упражнения.......................................................................................................................................158 Глава 7. Функторы в OpenCV.........................................................................................159 Объекты-работяги...........................................................................................................................159 Метод главных компонент (cv::PCA)..................................................................................159 Сингулярное разложение (cv::SVD)....................................................................................162 Генератор случайных чисел (cv::RNG)................................................................................164 Резюме.................................................................................................................................................167 Упражнения.......................................................................................................................................167 Глава 8. Изображения, видео и файлы данных............................................169 HighGUI: переносимый комплект графических инструментов.....................................169 Работа с файлами изображений.................................................................................................170 Загрузка и сохранение изображений...................................................................................171 Замечание о кодеках.......................................................................................................................172 Сжатие и распаковка......................................................................................................................173 Работа с видео...................................................................................................................................174 Чтение видео с помощью объекта cv::VideoCapture.......................................................174 Запись видео с помощью объекта cv::VideoWriter..........................................................179 Сохранение данных........................................................................................................................180 Запись в cv::FileStorage............................................................................................................180 Чтение из cv::FileStorage..........................................................................................................182 Класс cv::FileNode.......................................................................................................................183 Резюме.................................................................................................................................................185 Упражнения.......................................................................................................................................185 Глава 9. Платформенные и кросс-платформенные окна.....................188 Работа с окнами................................................................................................................................188 Платформенный графический интерфейс пользователя в HighGUI......................189 Работа с библиотекой Qt.........................................................................................................199 Интеграция OpenCV с полнофункциональными библиотеками для построения GUI..................................................................................................................208
Содержание 9 Резюме.................................................................................................................................................220 Упражнения.......................................................................................................................................220 Глава 10. Фильтры и свертка........................................................................................221 Вступление.........................................................................................................................................221 Прежде чем начать..........................................................................................................................221 Фильтры, ядра и свертка..........................................................................................................221 Экстраполяция рамки и граничные условия....................................................................222 Пороговые операции......................................................................................................................225 Метод Оцу.....................................................................................................................................228 Адаптивный порог......................................................................................................................228 Сглаживание.....................................................................................................................................231 Простое размытие и прямоугольный фильтр...................................................................231 Медианный фильтр....................................................................................................................233 Фильтр Гаусса..............................................................................................................................234 Двусторонний фильтр...............................................................................................................235 Производные и градиенты............................................................................................................237 Оператор Собеля........................................................................................................................237 Фильтр Шарра.............................................................................................................................239 Лапласиан......................................................................................................................................240 Морфологические преобразования...........................................................................................241 Наращивание и эрозия.............................................................................................................242 Общая морфологическая функция......................................................................................246 Размыкание и замыкание.........................................................................................................246 Морфологический градиент...................................................................................................249 Верх шляпы и черная шляпа..................................................................................................251 Создание собственного ядра...................................................................................................253 Свертка с произвольным линейным фильтром....................................................................254 Применение общего фильтра с помощью cv::filter2D()................................................255 Применение общего сепарабельного фильтра с помощью cv::sepFilter2D.............255 Построители ядер.......................................................................................................................256 Резюме.................................................................................................................................................257 Упражнения.......................................................................................................................................257 Глава 11. Преобразования изображений общего вида.........................261 Вступление.........................................................................................................................................261 Растяжение, сжатие, деформирование и вращение.............................................................261 Равномерное изменение размера..........................................................................................261 Пирамиды изображений..........................................................................................................263 Неравномерные отображения................................................................................................266 Аффинное преобразование.....................................................................................................268 Перспективное преобразование............................................................................................271 Преобразования общего вида......................................................................................................275 Полярное преобразование.......................................................................................................275 Лог-полярное преобразование...............................................................................................276
10 Содержание Произвольные отображения...................................................................................................279 Исправление изображений..........................................................................................................280 Ретуширование............................................................................................................................280 Очистка от шума.........................................................................................................................281 Выравнивание гистограммы........................................................................................................284 Резюме.................................................................................................................................................287 Упражнения.......................................................................................................................................287 Глава 12. Анализ изображений...................................................................................289 Вступление.........................................................................................................................................289 Дискретное преобразование Фурье..........................................................................................289 cv::dft(): дискретное преобразование Фурье.....................................................................290 cv::idft(): обратное дискретное преобразование Фурье................................................292 cv::mulSpectrums(): умножение спектров...........................................................................292 Свертка с помощью дискретного преобразования Фурье...........................................293 cv::dct(): дискретное косинусное преобразование..........................................................294 cv::idct(): обратное дискретное косинусное преобразование......................................295 Интегральные изображения........................................................................................................296 cv::integral(): интегральное изображение в виде суммы...............................................298 cv::integral(): интегральное изображение в виде суммы квадратов..........................298 cv::integral(): интегральное изображение в виде суммы с наклоном........................298 Детектор границ Кэнни.................................................................................................................299 cv::Canny()....................................................................................................................................300 Преобразования Хафа....................................................................................................................301 Преобразование Хафа для поиска прямых........................................................................301 Преобразование Хафа для поиска окружностей.............................................................304 Дистанционное преобразование................................................................................................308 cv::distanceTransform(): непомеченное дистанционное преобразование................309 cv::distanceTransform(): помеченное дистанционное преобразование.....................309 Сегментация......................................................................................................................................310 Заливка...........................................................................................................................................310 Алгоритм водораздела..............................................................................................................313 Алгоритм GrabCut......................................................................................................................314 Сегментация методом сдвига среднего...............................................................................316 Резюме.................................................................................................................................................318 Упражнения.......................................................................................................................................318 Глава 13. Гистограммы и шаблоны.........................................................................320 Представление гистограмм в OpenCV.....................................................................................322 cv::calcHist(): создание гистограммы по данным............................................................323 Базовые операции с гистограммами.........................................................................................325 Нормализация гистограммы..................................................................................................325 Пороговое отсечение гистограммы......................................................................................326 Нахождение интервала с наибольшим числом значений.............................................326 Сравнение двух гистограмм....................................................................................................328