Skip to content

Commit 837b9fc

Browse files
Updated practice description.
1 parent 6d64d74 commit 837b9fc

File tree

1 file changed

+134
-53
lines changed

1 file changed

+134
-53
lines changed

README.md

Lines changed: 134 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -1,64 +1,94 @@
1-
# Инфраструктура для проведения практики по основам библиотеки компьютерного зрения 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-
Проект представляет собой инфраструктуру для освоения основ работы с библиотекой OpenCV:
7-
- Загрузка/сохранение изображений (базовые примитивы и операции модуля ```opencv_core```).
8-
- Обработка изображений с помощью простеших фильтров библиотеки (операции модуля ```opencv_imgproc```).
9-
- Разработка простейшего интерфейса средствами библиотеки (базовые операции модуля ```opencv_highgui```).
6+
Проект представляет собой инфраструктуру для освоения основ работы
7+
с библиотекой OpenCV:
8+
- Загрузка/сохранение изображений (базовые примитивы и операции
9+
модуля ```opencv_core```).
10+
- Обработка изображений с помощью простеших фильтров библиотеки
11+
(операции модуля ```opencv_imgproc```).
12+
- Разработка простейшего интерфейса средствами библиотеки (базовые
13+
операции модуля ```opencv_highgui```).
1014

1115
## Общая структура проекта
1216

1317
Структура проекта:
14-
- ```3rdparty``` - библиотека gtest.
15-
- ```include``` - директория для размещения заголовочных файлов.
16-
- ```samples``` - директория для размещения примеров использования.
17-
- ```src``` - директория с исходными кодами.
18-
- ```test``` - директория с тестами.
19-
- ```.gitignore``` - перечень расширений файлов, которые не выкладываются в проект.
20-
- ```.travis.yml``` - конфигурационный файл для системы автоматического тестирования Travis-CI.
21-
- ```CMakeLists.txt``` - общий файл для сборки проекта с помощью CMake.
22-
- ```README.md``` - информация о проекте, которую вы сейчас читаете.
18+
- `3rdparty` - библиотека gtest.
19+
- `include` - директория для размещения заголовочных файлов.
20+
- `samples` - директория для размещения примеров использования.
21+
- `src` - директория с исходными кодами.
22+
- `test` - директория с тестами.
23+
- `testdata``` - директория с данными для тестов.
24+
- `.gitignore` - перечень расширений файлов, которые не выкладываются
25+
в проект.
26+
- `.travis.yml` - конфигурационный файл для системы автоматического
27+
тестирования Travis-CI.
28+
- `CMakeLists.txt` - общий файл для сборки проекта с помощью CMake.
29+
- `README.md` - информация о проекте, которую вы сейчас читаете.
2330

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

3041
## Цели и задачи
3142

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

34-
Для этого необходимо решить следующие **_задачи_**:
35-
1. Изучить базовые методы класса ```Mat``` (модуль ```opencv_core```), который применяется для представления изображений.
48+
Для этого необходимо решить следующие __задачи__:
49+
1. Изучить базовые методы класса `Mat` (модуль `opencv_core`), который
50+
применяется для представления изображений.
3651
2. Рассмотреть основные операции работы с изображениями:
37-
1. Создание изображения (с помощью конструкторов или метода ```create``` класса ```Mat```).
38-
2. Загрузка изображения (функция ```imread```).
39-
3. Сохранение изображения (функция ```imwrite```).
40-
4. Отображение изображения (функции ```imshow```, ```waitKey```).
41-
5. Копирование изображения (метод ```copyTo``` класса ```Mat```).
52+
1. Создание изображения (с помощью конструкторов или метода `create`
53+
класса `Mat`).
54+
2. Загрузка изображения (функция `imread`).
55+
3. Сохранение изображения (функция `imwrite`).
56+
4. Отображение изображения (функции `imshow`, `waitKey`).
57+
5. Копирование изображения (метод `copyTo` класса `Mat`).
4258
6. Методы фильтрации (размытие, сглаживание и др.).
43-
7. Преобразование изображения в различные цветовые пространства (функция ```cvtColor```).
44-
3. Изучить и реализовать с использованием OpenCV различные способы выделения контуров на изображении:
45-
1. Бинаризация изображения (функция ```threshold```) + поиск контуров (функция ```findContours```). Примечание: для отображения контуров следует использовать функцию ```drawContours```.
46-
2. Морфологический градиент (функция ```morphologyEx```).
47-
3. Оператор Собеля (функция ```Sobel```).
48-
4. Оператор Лапласа (функция ```Laplacian```).
49-
5. Детектор ребер Канни (функция ```Canny```). Примечание: перед применением фильтра Канни потребуется выполнить фильтрацию и преобразование изображеня в оттенки серого.
59+
7. Преобразование изображения в различные цветовые пространства
60+
(функция `cvtColor`).
61+
3. Изучить и реализовать с использованием OpenCV различные способы
62+
выделения контуров на изображении:
63+
1. Бинаризация изображения (функция `threshold`) + поиск контуров
64+
(функция `findContours`). Примечание: для отображения контуров
65+
следует использовать функцию `drawContours`.
66+
2. Морфологический градиент (функция `morphologyEx`).
67+
3. Оператор Собеля (функция `Sobel`).
68+
4. Оператор Лапласа (функция `Laplacian`).
69+
5. Детектор ребер Канни (функция `Canny`). Примечание: перед применением
70+
фильтра Канни потребуется выполнить фильтрацию и преобразование
71+
изображения в оттенки серого.
5072
4. Разработать графический интерфейс, удовлетворяющий следующим требованиям:
5173
1. Отображение исходного изображения.
5274
2. Отображение изображения, на котором отображены контуры.
53-
3. Наличие набора переключателей (кнопок) для применения различных методов выделения контуров.
75+
3. Наличие набора переключателей (кнопок) для применения различных
76+
методов выделения контуров.
5477

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

57-
1. Создать аккаунт на [github.com](https://github.com), если такой отсутствует. Для определенности обозначим аккаунт ```github-account```.
80+
1. Создать аккаунт на [github.com](https://github.com), если такой
81+
отсутствует. Для определенности обозначим аккаунт `github-account`.
5882

59-
2. Сделать fork репозитория ```https://github.com/Itseez-NNSU-SummerSchool2015/practice2-opencv-intro``` (в терминологии Git upstream-репозиторий) к себе в организацию с названием github-account. В результате будет создана копию репозитория с названием ```https://github.com/github-account/practice2-opencv-intro``` (origin-репозиторий).
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-репозиторий).
6089

61-
3. Клонировать репозиторий ```https://github.com/github-account/practice2-opencv-intro```, воспользовавшись следующей командой:
90+
3. Клонировать репозиторий [origin][origin] к себе на локальный компьютер,
91+
воспользовавшись следующей командой:
6292

6393
```
6494
$ git clone https://github.com/github-account/practice2-opencv-intro
@@ -70,42 +100,93 @@
70100
$ git remote add upstream https://github.com/Itseez-NNSU-SummerSchool2015/practice2-opencv-intro
71101
```
72102

73-
5. Настроить имя пользователя, из под которого будут выполняться все операции с репозиторией Git:
103+
5. Настроить имя пользователя, из под которого будут выполняться
104+
все операции с репозиторией Git:
74105

75106
```
76107
$ git config --global user.name "github-account"
77108
```
78109

79-
6. Создать ветку find-contours-implementation и перейти в нее:
110+
6. Создать ветку `find-contours-implementation` и перейти в нее:
80111

81112
```
82113
$ git checkout -b find-contours-implementation
83114
```
84115

85-
7. В ветку ```find-contours-implementation``` поместить реализации различных методов поиска контуров, снабдив весь разработанный код необходимым набором тестов.
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+
изображения в оттенки серого.
86132

87-
8. Создать ветку gui-implementation и перейти в нее:
133+
8. Создать ветку `gui-implementation` и перейти в нее:
88134

89135
```
90136
$ git checkout -b gui-implementation
91137
```
92138

93-
9. В ветку ```gui-implementation``` поместить разработанную интерфейсную часть. Примечание: по существу необходимо разработать пример использования библиотеки поиска контуров.
94-
95-
10. После получения каждой стабильной версии не забывайте проверять работоспособность тестов и выкладывать изменения в ветку.
139+
9. В ветку `gui-implementation` поместить разработанную интерфейсную часть.
140+
Примечание: по существу необходимо разработать пример использования
141+
реализованного метода поиска контуров. Далее приведены возможные
142+
варианты реализации интерфейса в порядке их усложнения с точки зрения
143+
программной реализации.
144+
145+
1. Отобразите одновременно в одном окне исходное изображение и изображение
146+
с выделенными контурами. Примечание: пример такого интерфейса уже
147+
имеется в проекте.
148+
2. Добавьте внизу окна виртуальные кнопки (на самом деле одноцветные
149+
изображения), каждая из которых соответствует вызову определенного
150+
метода выделения контуров изображении. Не забудьте на них добавить
151+
соответствующие надписи. Обеспечьте возможность обновления результата
152+
выделения контуров при нажатии на каждую из кнопок.
153+
154+
Примечание: примеров использования библиотеки может быть в проекте много.
155+
Когда разработан какой-то метод стоит его снабдить простым примером
156+
использования. Если задача выделения контуров решена уже несколькими
157+
способами, то можно подумать над усложненными вариантом интерфеса, который
158+
объединяет возможности использования различных способов выделения контуров.
159+
160+
10. После получения каждой стабильной версии не забывайте проверять
161+
работоспособность тестов и выкладывать изменения в ветку.
96162

97163
```
164+
$ git status # Получить список текущих изменений
165+
166+
$ git add [<file_name>] # Добавить файл в репозиторий
167+
# <file_name> - название файла для добавления в commit
168+
если вместо имени указан символ *, то будут добавлены все новые файлы,
169+
расширение которых не указано в .gitignore
170+
98171
$ git commit [-m "<message_to_commit>"] [-a]
99-
[-a] - автоматически добавляет изменения для существующих на сервере файлов без выполнения команды git add
100-
[--amend] - перезаписывает последний коммит (используется, если не забыты изменения)
101-
```
172+
# [-a] - автоматически добавляет изменения для существующих на сервере файлов
173+
без выполнения команды git add
174+
# [--amend] - перезаписывает последний коммит (используется, если не забыты
175+
изменения)
102176
177+
$ git push origin find-contours-implementation # или gui-implementation
103178
```
104-
git push origin <branch-name>
105-
```
106179

107-
11. Не забудьте сделать Pull Request, чтобы проверить работоспособность тестов на Travis-CI и позволить преподавателям сделать ревью Вашего кода.
180+
11. Не забудьте сделать Pull Request, чтобы проверить работоспособность
181+
тестов на Travis-CI и позволить преподавателям сделать ревью Вашего кода.
182+
183+
**Примечание:** подробная инструкция по сборке проекта, запуска тестов была
184+
описана в [практической работе по освоению инструментов разработки]
185+
(https://github.com/Itseez-NNSU-SummerSchool2015/practice1-devtools).
186+
При сборке проекта в командной строке `cmake` необходимо указать
187+
опцию `-DOpenCV_DIR="path-to-OpenCVConfig.cmake"`, чтобы подключить
188+
библиотеку OpenCV.
108189

109-
**Примечание:** подробная инструкция по сборке проекта, запуска тестов была описана
110-
в [практической работе по освоению инструментов разработки](https://github.com/Itseez-NNSU-SummerSchool2015/practice1-devtools).
111-
При сборке проекта в командной строке `cmake` необходимо указать опцию `-DOpenCV_DIR="path-to-OpenCVConfig.cmake"`
190+
<!-- LINKS -->
191+
192+
[origin]: https://github.com/github-account/practice2-opencv-intro

0 commit comments

Comments
 (0)