Skip to content

Commit 8da1195

Browse files
author
Kirill Kornyakov
committed
Convert README to utf-8, minor fixes
1 parent f9c8579 commit 8da1195

File tree

1 file changed

+131
-128
lines changed

1 file changed

+131
-128
lines changed

README.md

Lines changed: 131 additions & 128 deletions
Original file line numberDiff line numberDiff line change
@@ -1,204 +1,207 @@
1-
# Практика 2. Базовые примитивы и основные операции обработки изображений в библиотеке OpenCV
1+
# Практика 2. Основы работы с библиотекой OpenCV
22

33
[![Build Status](https://travis-ci.org/Itseez-NNSU-SummerSchool2015/practice2-opencv-intro.svg)](https://travis-ci.org/Itseez-NNSU-SummerSchool2015/practice2-opencv-intro)
44

55

6-
Проект представляет собой инфраструктуру для освоения основ работы
6+
Проект представляет собой инфраструктуру для освоения основ работы
77
с библиотекой OpenCV:
8-
- Загрузка/сохранение изображений (базовые примитивы и операции
9-
модуля ```opencv_core```).
10-
- Обработка изображений с помощью простеших фильтров библиотеки
11-
(операции модуля ```opencv_imgproc```).
12-
- Разработка простейшего интерфейса средствами библиотеки (базовые
13-
операции модуля ```opencv_highgui```).
8+
9+
- Базовые примитивы и операции модуля `opencv_core`.
10+
- Обработка изображений с помощью простеших фильтров библиотеки
11+
(модуль `opencv_imgproc`).
12+
- Загрузка/сохранение изображений, разработка простейшего интерфейса
13+
средствами библиотеки (модуль `opencv_highgui`).
1414

1515
## Общая структура проекта
1616

1717
Структура проекта:
18+
1819
- `3rdparty` - библиотека gtest.
1920
- `include` - директория для размещения заголовочных файлов.
2021
- `samples` - директория для размещения примеров использования.
2122
- `src` - директория с исходными кодами.
2223
- `test` - директория с тестами.
23-
- `testdata``` - директория с данными для тестов.
24-
- `.gitignore` - перечень расширений файлов, которые не выкладываются
24+
- `testdata` - директория с данными для тестов.
25+
- `.gitignore` - перечень расширений файлов, которые не выкладываются
2526
в проект.
26-
- `.travis.yml` - конфигурационный файл для системы автоматического
27+
- `.travis.yml` - конфигурационный файл для системы автоматического
2728
тестирования Travis-CI.
2829
- `CMakeLists.txt` - общий файл для сборки проекта с помощью CMake.
2930
- `README.md` - информация о проекте, которую вы сейчас читаете.
3031

3132
В шаблонном проекте имеются следующие модули:
32-
- Модуль вспомогательных функций (`./include/auxiliaries.hpp`,
33-
`./src/auxiliaries.hpp`), в частности, функция обработки аргументов
34-
командной строки.
35-
- Модуль, содержащий объявление и реализацию функций загрузки, обработки
33+
34+
- Модуль вспомогательных функций (`./include/auxiliaries.hpp`,
35+
`./src/auxiliaries.hpp`), в частности, функция обработки аргументов
36+
командной строки.
37+
- Модуль, содержащий объявление и реализацию функций загрузки, обработки
3638
и отображения изображений (`./include/img_proc.hpp`, `./src/img_proc.hpp`).
3739
- Примеры тестов (`aux_test.cpp`).
38-
- Пример приложения, демонстрирующего применение медианного фильтра
40+
- Пример приложения, демонстрирующего применение медианного фильтра
3941
(`sample_template.cpp`).
4042

4143
## Цели и задачи
4244

43-
__Цель данной работы__ - изучить базовые примитивы модуля `opencv_core`
44-
и простейшие операции обработки изображений модуля `opencv_imgproc`, научиться
45-
разрабатывать интерфейс средствами модуля `opencv_highgui` на примере задачи
45+
__Цель данной работы__ - изучить базовые примитивы модуля `opencv_core`
46+
и простейшие операции обработки изображений модуля `opencv_imgproc`, научиться
47+
разрабатывать интерфейс средствами модуля `opencv_highgui` на примере задачи
4648
определения ребер на изображении.
4749

4850
Для этого необходимо решить следующие __задачи__:
49-
1. Изучить базовые методы класса `Mat` (модуль `opencv_core`), который
51+
52+
1. Изучить базовые методы класса `cv::Mat` (модуль `opencv_core`), который
5053
применяется для представления изображений.
5154
2. Рассмотреть основные операции работы с изображениями:
52-
1. Создание изображения (с помощью конструкторов или метода `create`
53-
класса `Mat`).
54-
2. Загрузка изображения (функция `imread`).
55-
3. Сохранение изображения (функция `imwrite`).
56-
4. Отображение изображения (функции `imshow`, `waitKey`).
57-
5. Копирование изображения (метод `copyTo` класса `Mat`).
58-
6. Методы фильтрации (размытие, сглаживание и др.).
59-
7. Преобразование изображения в различные цветовые пространства
60-
(функция `cvtColor`).
61-
3. Изучить и реализовать с использованием OpenCV различные способы
55+
1. Создание изображения с помощью конструкторов или метода `create` класса
56+
`Mat`.
57+
2. Загрузка изображения (функция `imread`).
58+
3. Сохранение изображения (функция `imwrite`).
59+
4. Отображение изображения (функции `imshow`, `waitKey`).
60+
5. Копирование изображения (метод `copyTo` класса `Mat`).
61+
6. Методы фильтрации (размытие, сглаживание и др.).
62+
7. Преобразование изображения в различные цветовые пространства (функция
63+
`cvtColor`).
64+
3. Изучить и реализовать с использованием OpenCV различные способы
6265
выделения контуров на изображении:
63-
1. Бинаризация изображения (функция `threshold`) + поиск контуров
64-
(функция `findContours`). Примечание: для отображения контуров
65-
следует использовать функцию `drawContours`.
66-
2. Морфологический градиент (функция `morphologyEx`).
67-
3. Оператор Собеля (функция `Sobel`).
68-
4. Оператор Лапласа (функция `Laplacian`).
69-
5. Детектор ребер Канни (функция `Canny`). Примечание: перед применением
70-
фильтра Канни потребуется выполнить фильтрацию и преобразование
71-
изображения в оттенки серого.
66+
1. Бинаризация изображения (функция `threshold`) + поиск контуров
67+
(функция `findContours`). Примечание: для отображения контуров
68+
следует использовать функцию `drawContours`.
69+
2. Морфологический градиент (функция `morphologyEx`).
70+
3. Оператор Собеля (функция `Sobel`).
71+
4. Оператор Лапласа (функция `Laplacian`).
72+
5. Детектор ребер Канни (функция `Canny`). Примечание: перед применением
73+
фильтра Канни потребуется выполнить фильтрацию и преобразование
74+
изображения в оттенки серого.
7275
4. Разработать графический интерфейс, удовлетворяющий следующим требованиям:
7376
1. Отображение исходного изображения.
74-
2. Отображение изображения, на котором отображены контуры.
75-
3. Наличие набора переключателей (кнопок) для применения различных
76-
методов выделения контуров.
77+
2. Отображение изображения, на котором отображены контуры.
78+
3. Наличие набора переключателей (кнопок) для применения различных
79+
методов выделения контуров.
7780

7881
## Инструкция по выполнению работы
7982

80-
1. Создать аккаунт на [github.com](https://github.com), если такой
83+
1. Создать аккаунт на [github.com](https://github.com), если такой
8184
отсутствует. Для определенности обозначим аккаунт `github-account`.
82-
83-
2. Сделать fork репозитория
84-
<https://github.com/Itseez-NNSU-SummerSchool2015/practice2-opencv-intro>
85-
(в терминологии Git upstream-репозиторий) к себе в организацию с названием
86-
`github-account`. В результате будет создана копию репозитория с названием
87-
<https://github.com/github-account/practice2-opencv-intro>
88-
(origin-репозиторий).
89-
90-
3. Клонировать репозиторий [origin][origin] к себе на локальный компьютер,
85+
86+
2. Сделать fork репозитория
87+
<https://github.com/Itseez-NNSU-SummerSchool2015/practice2-opencv-intro>
88+
(в терминологии Git upstream-репозиторий) к себе в организацию с названием
89+
`github-account`. В результате будет создана копию репозитория с названием
90+
<https://github.com/github-account/practice2-opencv-intro>
91+
(origin-репозиторий).
92+
93+
3. Клонировать репозиторий [origin][origin] к себе на локальный компьютер,
9194
воспользовавшись следующей командой:
92-
95+
9396
```
9497
$ git clone https://github.com/github-account/practice2-opencv-intro
9598
```
96-
99+
97100
4. Настроить upstream-репозиторий:
98-
101+
99102
```
100103
$ git remote add upstream https://github.com/Itseez-NNSU-SummerSchool2015/practice2-opencv-intro
101104
```
102-
103-
5. Настроить имя пользователя, из под которого будут выполняться
105+
106+
5. Настроить имя пользователя, из под которого будут выполняться
104107
все операции с репозиторией Git:
105-
108+
106109
```
107110
$ git config --global user.name "github-account"
108111
```
109-
112+
110113
6. Создать ветку `find-contours-implementation` и перейти в нее:
111-
114+
112115
```
113116
$ git checkout -b find-contours-implementation
114117
```
115-
116-
7. В ветку `find-contours-implementation` поместить реализации различных
117-
методов поиска контуров, снабдив весь разработанный код необходимым
118-
набором тестов. В качестве шаблона необходимо использовать модуль
119-
`img_proc`. Модуль должен быть расширен различными реализациями методов
120-
поиска контуров на изображении средствами OpenCV. Для начала имеет смысл
121-
сосредоточиться на реализации одного метода из перечисленных ниже.
122-
123-
1. Бинаризация изображения (функция `threshold`) + поиск контуров
124-
(функция `findContours`). Примечание: для отображения контуров
125-
следует использовать функцию `drawContours`.
126-
2. Морфологический градиент (функция `morphologyEx`).
127-
3. Оператор Собеля (функция `Sobel`).
128-
4. Оператор Лапласа (функция `Laplacian`).
129-
5. Детектор ребер Канни (функция `Canny`). Примечание: перед применением
130-
фильтра Канни потребуется выполнить фильтрацию и преобразование
131-
изображения в оттенки серого.
118+
119+
7. В ветку `find-contours-implementation` поместить реализации различных
120+
методов поиска контуров, снабдив весь разработанный код необходимым
121+
набором тестов. В качестве шаблона необходимо использовать модуль
122+
`img_proc`. Модуль должен быть расширен различными реализациями методов
123+
поиска контуров на изображении средствами OpenCV. Для начала имеет смысл
124+
сосредоточиться на реализации одного метода из перечисленных ниже.
125+
126+
1. Бинаризация изображения (функция `threshold`) + поиск контуров
127+
(функция `findContours`). Примечание: для отображения контуров
128+
следует использовать функцию `drawContours`.
129+
2. Морфологический градиент (функция `morphologyEx`).
130+
3. Оператор Собеля (функция `Sobel`).
131+
4. Оператор Лапласа (функция `Laplacian`).
132+
5. Детектор ребер Канни (функция `Canny`). Примечание: перед применением
133+
фильтра Канни потребуется выполнить фильтрацию и преобразование
134+
изображения в оттенки серого.
132135

133136
8. Создать ветку `gui-implementation` и перейти в нее:
134-
137+
135138
```
136139
$ git checkout -b gui-implementation
137140
```
138-
139-
9. В ветку `gui-implementation` поместить разработанную интерфейсную часть.
140-
Примечание: по существу необходимо разработать пример использования
141-
реализованного метода поиска контуров. Далее приведены возможные
142-
варианты реализации интерфейса в порядке их усложнения с точки зрения
143-
программной реализации.
144-
145-
1. Отобразите одновременно в одном окне исходное изображение и изображение
146-
с выделенными контурами.
147-
148-
*Указание:* воспользуйтесь имеющимся примером отображения результата
149-
медианной фильтрации.
150-
151-
2. Добавьте внизу окна виртуальные кнопки (на самом деле одноцветные
152-
изображения), каждая из которых соответствует вызову определенного
153-
метода выделения контуров изображении. Не забудьте на них добавить
154-
соответствующие надписи. Обеспечьте возможность обновления результата
155-
выделения контуров при нажатии на каждую из кнопок.
156-
157-
*Указание:* следует использовать возможность создания обработчика
158-
события нажатия на кнопку, отслеживая положение курсора в каждый
159-
текущий момент времени, чтобы определить, какой метод поиска контуров
160-
необходимо вызвать.
161-
162-
**Примечание:** примеров использования библиотеки может быть в проекте много.
163-
Когда разработан какой-то метод стоит его снабдить простым примером
164-
использования. Если задача выделения контуров решена уже несколькими
165-
способами, то можно подумать над усложненными вариантом интерфеса, который
166-
объединяет возможности использования различных способов выделения контуров.
167-
168-
10. После получения каждой стабильной версии не забывайте проверять
169-
работоспособность тестов и выкладывать изменения в ветку.
170-
141+
142+
9. В ветку `gui-implementation` поместить разработанную интерфейсную часть.
143+
Примечание: по существу необходимо разработать пример использования
144+
реализованного метода поиска контуров. Далее приведены возможные
145+
варианты реализации интерфейса в порядке их усложнения с точки зрения
146+
программной реализации.
147+
148+
1. Отобразите одновременно в одном окне исходное изображение и изображение
149+
с выделенными контурами.
150+
151+
*Указание:* воспользуйтесь имеющимся примером отображения результата
152+
медианной фильтрации.
153+
154+
2. Добавьте внизу окна виртуальные кнопки (на самом деле одноцветные
155+
изображения), каждая из которых соответствует вызову определенного
156+
метода выделения контуров изображении. Не забудьте на них добавить
157+
соответствующие надписи. Обеспечьте возможность обновления результата
158+
выделения контуров при нажатии на каждую из кнопок.
159+
160+
*Указание:* следует использовать возможность создания обработчика
161+
события нажатия на кнопку, отслеживая положение курсора в каждый
162+
текущий момент времени, чтобы определить, какой метод поиска контуров
163+
необходимо вызвать.
164+
165+
__Примечание:__ примеров использования библиотеки может быть в проекте
166+
много. Когда разработан какой-то метод стоит его снабдить простым примером
167+
использования. Если задача выделения контуров решена уже несколькими
168+
способами, то можно подумать над усложненными вариантом интерфейса, который
169+
объединяет возможности использования различных способов выделения контуров.
170+
171+
10. После получения каждой стабильной версии не забывайте проверять
172+
работоспособность тестов и выкладывать изменения в ветку.
173+
171174
```
172175
$ git status # Получить список текущих изменений
173-
176+
174177
$ git add [<file_name>] # Добавить файл в репозиторий
175178
# <file_name> - название файла для добавления в commit
176-
если вместо имени указан символ *, то будут добавлены все новые файлы,
179+
если вместо имени указан символ *, то будут добавлены все новые файлы,
177180
расширение которых не указано в .gitignore
178-
181+
179182
$ git commit [-m "<message_to_commit>"] [-a]
180183
# [-a] - автоматически добавляет изменения для существующих на сервере файлов
181184
без выполнения команды git add
182185
# [--amend] - перезаписывает последний коммит (используется, если не забыты
183186
изменения)
184-
187+
185188
$ git push origin find-contours-implementation # или gui-implementation
186189
```
187-
188-
11. Не забудьте сделать Pull Request, чтобы проверить работоспособность
190+
191+
11. Не забудьте сделать Pull Request, чтобы проверить работоспособность
189192
тестов на Travis-CI и позволить преподавателям сделать ревью Вашего кода.
190-
191-
**Примечание:** подробная инструкция по сборке проекта, запуска тестов была
193+
194+
__Примечание:__ подробная инструкция по сборке проекта, запуску тестов была
192195
описана в [практической работе по освоению инструментов разработки]
193-
(https://github.com/Itseez-NNSU-SummerSchool2015/practice1-devtools).
194-
При сборке проекта в командной строке `cmake` необходимо указать
195-
опцию `-DOpenCV_DIR="path-to-OpenCVConfig.cmake"`, чтобы подключить
196-
библиотеку OpenCV.
197-
198-
12. При наличии времени можно организовать обработку видео и вместо одного
199-
изображения обрабатывать и отображать последовательно идущие кадры
200-
потока.
201-
196+
(https://github.com/Itseez-NNSU-SummerSchool2015/practice1-devtools). При
197+
сборке проекта в командной строке `cmake` необходимо указать опцию
198+
`-DOpenCV_DIR="path-to-OpenCVConfig.cmake"`, чтобы подключить библиотеку
199+
OpenCV.
200+
201+
12. При наличии времени можно организовать обработку видео и вместо одного
202+
изображения обрабатывать и отображать последовательно идущие кадры
203+
потока.
204+
202205
<!-- LINKS -->
203206

204207
[origin]: https://github.com/github-account/practice2-opencv-intro

0 commit comments

Comments
 (0)