Skip to content

Commit 9c0f557

Browse files
Readme update.
1 parent 80d33cc commit 9c0f557

File tree

1 file changed

+71
-66
lines changed

1 file changed

+71
-66
lines changed

README.md

Lines changed: 71 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ __Цель данной работы__ - изучить базовые прим
1515
(методы класса `cv::Mat` для представления изображения).
1616
- Обработка изображений с помощью простеших фильтров модуля `opencv_imgproc`
1717
(линейные фильтры, вычисление градиентов на изображении).
18-
- Основные операции модуля `opencv_highgui` (загрузка изображения
18+
- Основные операции модуля `opencv_highgui` (загрузка изображения
1919
средствами `imread`, сохранение изображения с использованием
2020
`imwrite`, отображение изображения с помощью функций `imshow` и `waitKey`,
2121
реализация сложных сценариев обработки событий).
@@ -47,7 +47,7 @@ __Цель данной работы__ - изучить базовые прим
4747
- Модуль графичекого приложения `application`. Содержит метод обработки
4848
аргументов командной строки `parseArguments` обертку `processFrame`
4949
над функцией обработки изображения с использованием метода,
50-
реализованного в модуле `processing`; метод отображения окна с двуми
50+
реализованного в модуле `processing`; метод отображения окна с двуми
5151
изображениями - исходным и обработанным, если фильтр включен, либо двумя
5252
исходными, если фильтр выключен; методы, необходимые для обработки событий
5353
нажатия на кнопки включение/выключения фильтра.
@@ -105,8 +105,8 @@ __Дополнительные задачи:__
105105
[Canny](http://docs.opencv.org/doc/tutorials/imgproc/imgtrans/canny_detector/canny_detector.html)).
106106
6. Решить задачи из списка
107107
[Дополнительные задачи](https://github.com/Itseez-NNSU-SummerSchool2015/practice2-opencv-intro#Задачи)
108-
(документация к классу [cv::VideoCapture](http://docs.opencv.org/modules/highgui/doc/reading_and_writing_images_and_video.html#videocapture)
109-
для работы с видео).
108+
(документация к классу [cv::VideoCapture](http://docs.opencv.org/modules/highgui/doc/reading_and_writing_images_and_video.html#videocapture)
109+
для работы с видео).
110110

111111
## Детальная инструкция по выполнению работы
112112

@@ -122,18 +122,22 @@ __Дополнительные задачи:__
122122
действий описана в разделе
123123
[Сборка проекта с помощью CMake и MS VS](https://github.com/Itseez-NNSU-SummerSchool2015/practice1-devtools#Сборка-проекта-с-помощью-cmake-и-microsoft-visual-studio)
124124
в [практической работе по освоению инструментов разработки ПО](https://github.com/Itseez-NNSU-SummerSchool2015/practice1-devtools)).
125-
4. Создать копию директории с сэмплом, дав ей название `YOUR_NAME`, и
125+
4. Создать новую ветку для разработки собственного приложения
126+
необходимые команды описаны в разделе
127+
[Общие инструкции по работе с Git](https://github.com/Itseez-NNSU-SummerSchool2015/practice1-devtools#Общие-инструкции-по-работе-с-git)
128+
в [практической работе по освоению инструментов разработки ПО](https://github.com/Itseez-NNSU-SummerSchool2015/practice1-devtools)).
129+
5. Создать копию директории с сэмплом, дав ей название `YOUR_NAME`, и
126130
добавить ее построение в общий `CMakeLists.txt` (`add_subdirectory(YOUR_NAME)`).
127-
5. Убедиться, что новый сэмпл с шаблонной реализацией успешно собирается
131+
6. Убедиться, что новый сэмпл с шаблонной реализацией успешно собирается
128132
и запускается (подробная последовательность
129133
действий описана в разделе
130134
[Сборка проекта с помощью CMake и MS VS](https://github.com/Itseez-NNSU-SummerSchool2015/practice1-devtools#Сборка-проекта-с-помощью-cmake-и-microsoft-visual-studio)
131135
в [практической работе по освоению инструментов разработки ПО](https://github.com/Itseez-NNSU-SummerSchool2015/practice1-devtools)).
132-
6. Прислать Pull Request с еще неизмененным сэмплом. Пометить в конце
136+
7. Прислать Pull Request с еще неизмененным сэмплом. Пометить в конце
133137
названия `(NOT READY)`. По мере готовности решений основных задач Pull
134138
Request можно будет переименовать, нажав кнопку `Edit` напротив его
135139
названия.
136-
7. Сделать так, чтобы регион фильтрации менял со временем свое положение и
140+
8. Сделать так, чтобы регион фильтрации менял со временем свое положение и
137141
размеры.
138142

139143
1. Для этого необходимо в методе `processFrame` класса `Processing`
@@ -148,7 +152,7 @@ __Дополнительные задачи:__
148152
изображения, если вышло, то обрезать лишние части окна.
149153
3. По окончании решения данной задачи следует прислать Rull Request.
150154

151-
4. Добавить третью кнопку, позволяющую сохранить текущее изображение
155+
9. Добавить третью кнопку, позволяющую сохранить текущее изображение
152156
на экране. Сохранять можно в текущую директорию с меткой времени.
153157

154158
1. В структуру `GUIElementsState` добавить поле `cv::Rect saveButtonPlace`.
@@ -158,79 +162,80 @@ __Дополнительные задачи:__
158162
добавить надпись `Save`. Положение кнопки сохранить в поле `saveButtonPlace`
159163
объекта `guiState`.
160164
3. В структуру `GUIElementsState` добавить поле `bool saveState` -
161-
флаг, обозначающий необходимость сохранения текущего окна с изображениями.
162-
Изначально присвоить ему значение `false` в конструкторе класса
163-
`Application`.
164-
4. В реализацию метода `onButtonsOnOffClick` добавить еще одно условие
165-
для обработки события, связанного с нажатием кнопки сохранения.
165+
флаг, обозначающий необходимость сохранения текущего окна с изображениями.
166+
Изначально присвоить ему значение `false` в конструкторе класса
167+
`Application`.
168+
4. В реализацию метода `onButtonsOnOffClick` добавить еще одно условие
169+
для обработки события, связанного с нажатием кнопки сохранения.
166170

167171
```
168172
if (onButtonClicked(elems->saveButtonPlace, x, y))
169173
{
170174
elems->saveState = true;
171-
return;
175+
return;
172176
}
173177
```
174178
175179
5. В реализацию метода `showFrame` класса `Application` после отрисовки
176-
пары изображений и до отрисовки кнопок необходимо вставить условие
177-
для проверки необходимости сохранения текущей пары изображений.
180+
пары изображений и до отрисовки кнопок необходимо вставить условие
181+
для проверки необходимости сохранения текущей пары изображений.
178182
179-
```
183+
```
180184
if (elems->saveState)
181185
{
182-
// получить текущее время
183-
// сгенерировать название изображения
184-
// <image_name> - сгенерированное название изображения
185-
// с меткой текущего времени
186+
// получить текущее время
187+
// сгенерировать название изображения
188+
// <image_name> - сгенерированное название изображения
189+
// с меткой текущего времени
186190
// вызвать функцию сохранения imwrite(<image_name>, display)
187191
}
188192
```
189-
190-
6. Прислать Pull Request.
191-
192-
5. Добавить несколько дополнительных кнопок, позволяющих менять тип фильтра
193-
(см. п.3 раздела [Основные задачи](https://github.com/Itseez-NNSU-SummerSchool2015/practice2-opencv-intro#Задачи)).
194-
195-
1. В класс `Processing` добавить перечисление для обозначения типа
196-
фильтра, который применяется к изображению.
197-
193+
194+
6. Прислать Pull Request.
195+
196+
10. Добавить несколько дополнительных кнопок, позволяющих менять тип фильтра
197+
(см. п.3 раздела
198+
[Основные задачи](https://github.com/Itseez-NNSU-SummerSchool2015/practice2-opencv-intro#Задачи)).
199+
200+
1. В класс `Processing` добавить перечисление для обозначения типа
201+
фильтра, который применяется к изображению.
202+
198203
```
199-
enum FilterType
200-
{
201-
MEDIAN,
202-
CVT_CONVERT_GRAY,
203-
PIXELIZED,
204-
CANNY
205-
};
206-
```
204+
enum FilterType
205+
{
206+
MEDIAN,
207+
CVT_CONVERT_GRAY,
208+
PIXELIZED,
209+
CANNY
210+
};
211+
```
212+
213+
2. В объявление метода `processFrame` класса `Processing` добавить параметр
214+
типа `FilterType filter`.
215+
3. В реализации метода `processFrame` класса `Processing` вместо вызова
216+
функции медианной фильтрации `medianBlur(roi, roi, kSize)` добавить
217+
оператор множественного выбора по параметру `filter`. В зависимости от
218+
типа фильтра необходимо вызывать тот или набор функций библиотеки OpenCV.
219+
4. Отрисовать дополнительные кнопки по аналогии с кнопкой сохранения
220+
изображений. Положение кнопок сохранить в структуре `GUIElementsState`.
221+
Замечание: кнопку `On` можно только переименовать в `Median`.
222+
5. В структуру `GUIElementsState` добавить поле для хранения типа
223+
последнего вызванного для обработки фильтра `Processing::FilterType filter`.
224+
6. В конструкторе класса установить начальное значение `guiState.filter` в
225+
значение `Processing::MEDIAN`.
226+
7. Вызов метода `processFrame(src, dst)` заменить на
227+
`processFrame(src, dst, guiState.filter)`.
228+
8. Изменить обработчик события нажатия по кнопкам `onButtonsOnOffClick`, добавив
229+
несколько проверок, соответствующих нажатию по определенным кнопкам.
230+
Содержимое условного оператора приведено ниже.
207231
208-
2. В объявление метода `processFrame` класса `Processing` добавить параметр
209-
типа `FilterType filter`.
210-
3. В реализации метода `processFrame` класса `Processing` вместо вызова
211-
функции медианной фильтрации `medianBlur(roi, roi, kSize)` добавить
212-
оператор множественного выбора по параметру `filter`. В зависимости от
213-
типа фильтра необходимо вызывать тот или набор функций библиотеки OpenCV.
214-
4. Отрисовать дополнительные кнопки по аналогии с кнопкой сохранения
215-
изображений. Положение кнопок сохранить в структуре `GUIElementsState`.
216-
Замечание: кнопку `On` можно только переименовать в `Median`.
217-
5. В структуру `GUIElementsState` добавить поле для хранения типа
218-
последнего вызванного для обработки фильтра `Processing::FilterType filter`.
219-
6. В конструкторе класса установить начальное значение `guiState.filter` в
220-
значение `Processing::MEDIAN`.
221-
7. Вызов метода `processFrame(src, dst)` заменить на
222-
`processFrame(src, dst, guiState.filter)`.
223-
8. Изменить обработчик события нажатия по кнопкам `onButtonsOnOffClick`, добавив
224-
несколько проверок, соответствующих нажатию по определенным кнопкам.
225-
Содержимое условного оператора приведено ниже.
226-
227-
```
232+
```
228233
elems->state = Application::OnFilter;
229-
elems->filter=Processing::MEDIAN;
230-
return;
231-
```
232-
233-
9. Проверить работоспособность приложения и прислать Rull Request.
234-
235-
6. Решить задачи из списка
234+
elems->filter=Processing::MEDIAN;
235+
return;
236+
```
237+
238+
9. Проверить работоспособность приложения и прислать Rull Request.
239+
240+
11. Решить задачи из списка
236241
[Дополнительные задачи](https://github.com/Itseez-NNSU-SummerSchool2015/practice2-opencv-intro#Задачи).

0 commit comments

Comments
 (0)