@@ -81,6 +81,9 @@ __Дополнительные задачи:__
81
81
2 . Скомпилировать и запустить сэмпл на картинке (раздел
82
82
[ Сборка проекта с помощью CMake и MS VS] [ cmake-msvs ]
83
83
в [ практической работе 1] [ practice1 ] .
84
+ 3 . Создать новую ветку для разработки собственного приложения
85
+ необходимые команды описаны в разделе
86
+ [ Общие инструкции по работе с Git] [ git-intro ] в [ практической работе 1] [ practice1 ] .
84
87
4 . Создать копию директории с сэмплом, добавить ее построение в корневой
85
88
` CMakeLists.txt ` .
86
89
5 . Убедиться, что новый сэмпл успешно собирается и запускается.
@@ -109,9 +112,15 @@ __Дополнительные задачи:__
109
112
2 . Скомпилировать и запустить сэмпл на картинке (подробная последовательность
110
113
действий описана в разделе [ Сборка проекта с помощью CMake и MS VS] [ cmake-msvs ]
111
114
в [ практической работе 1] [ practice1 ] ).
115
+ 3 . Создать новую ветку для разработки собственного приложения
116
+ необходимые команды описаны в разделе
117
+ [ Общие инструкции по работе с Git] [ git-intro ] в [ практической работе 1] [ practice1 ] .
112
118
4 . Создать копию директории с сэмплом, дав ей название ` sample_YOUR_NAME ` , и
113
119
добавить ее построение в общий ` CMakeLists.txt `
114
- (` add_subdirectory(sample_YOUR_NAME) ` ).
120
+ (` add_subdirectory(sample_YOUR_NAME) ` ). В файле ` CMakeLists.txt ` , отноящемся
121
+ к созданному проекту (расположен внутри директории ` sample_YOUR_NAME ` )
122
+ необходимо заменить ` set(target "sample_template") ` на
123
+ ` set(target "sample_YOUR_NAME") `
115
124
5 . Убедиться, что новый сэмпл с шаблонной реализацией успешно собирается
116
125
и запускается (подробная последовательность действий описана в разделе
117
126
[ Сборка проекта с помощью CMake и MS VS] [ cmake-msvs ]
@@ -122,7 +131,6 @@ __Дополнительные задачи:__
122
131
названия.
123
132
7 . Сделать так, чтобы регион фильтрации менял со временем свое положение и
124
133
размеры.
125
-
126
134
1 . Для этого необходимо в методе ` processFrame ` класса ` Processing `
127
135
заменить фиксированное положение фильтра на процедурную генерацию
128
136
положения левого верхнего угла ` x ` и ` y ` региона ` region ` при
@@ -134,17 +142,18 @@ __Дополнительные задачи:__
134
142
cv::Rect region(src.rows/4, src.cols/4, src.rows/2, src.cols/2);
135
143
```
136
144
137
- 2. При генерации следует учитывать, что окно фильтрации должно попадать в
145
+ При генерации следует учитывать, что окно фильтрации должно попадать в
138
146
область изображения. Решение 1: пределы генерации координат должны быть
139
147
зафиксированы так, чтобы окно всегда накрывало какую-то часть
140
148
изображения. Решение 2: проверять, не вышло ли окно за пределы
141
149
изображения, если вышло, то обрезать лишние части окна.
150
+ 2. Не забывайте коммитить изменения в локальный репозиторий и выкладывать
151
+ их в ветку на сервере.
142
152
3. По окончании решения данной задачи следует обновить Rull Request.
143
-
144
- 4. Добавить третью кнопку, позволяющую сохранить текущее изображение на
153
+ 8. Добавить третью кнопку, позволяющую сохранить текущее изображение на
145
154
экране. Сохранять можно в текущую директорию с меткой времени.
146
-
147
- 1. В структуру `GUIElementsState` добавить поле `cv::Rect saveButtonPlace`.
155
+ 1. В структуру `GUIElementsState` (файл `Application.hpp`) добавить поле
156
+ `cv::Rect saveButtonPlace`.
148
157
2. В метод `drawButtons` класса `Application` добавить отрисовку третьей
149
158
кнопки по аналогии с кнопками включения/выключения фильтрации.
150
159
Расположить кнопку необходимо на одной линии с имеющимися. Также на
@@ -177,12 +186,13 @@ __Дополнительные задачи:__
177
186
// <image_name> - сгенерированное название изображения
178
187
// с меткой текущего времени
179
188
// вызвать функцию сохранения imwrite(<image_name>, display)
189
+ // сбросить значение guiState.saveState в false
180
190
}
181
191
```
182
192
183
193
6. Обновить Pull Request.
184
194
185
- 5 . Добавить несколько дополнительных кнопок, позволяющих менять тип фильтра
195
+ 9 . Добавить несколько дополнительных кнопок, позволяющих менять тип фильтра
186
196
(см. п.3 раздела [Основные задачи][tasks].
187
197
188
198
1. В класс `Processing` добавить перечисление для обозначения типа фильтра,
@@ -213,8 +223,9 @@ __Дополнительные задачи:__
213
223
filter`.
214
224
6. В конструкторе класса установить начальное значение `guiState.filter` в
215
225
значение `Processing::MEDIAN`.
216
- 7. Вызов метода `processFrame(src, dst)` заменить на
217
- `processFrame(src, dst, guiState.filter)`.
226
+ 7. Вызов метода `processor.processFrame(src, dst)` заменить на
227
+ `processor.processFrame(src, dst, guiState.filter)` (метод класса приложения
228
+ `int Application::processFrame(const Mat& src, Mat& dst)`).
218
229
8. Изменить обработчик события нажатия по кнопкам `onButtonsOnOffClick`,
219
230
добавив несколько проверок, соответствующих нажатию по определенным
220
231
кнопкам. Содержимое условного оператора приведено ниже.
@@ -226,8 +237,7 @@ __Дополнительные задачи:__
226
237
```
227
238
228
239
9. Проверить работоспособность приложения и обновить Rull Request.
229
-
230
- 6. Решить задачи из списка [Дополнительные задачи][tasks].
240
+ 10. Решить задачи из списка [Дополнительные задачи][tasks].
231
241
232
242
<!-- LINKS -->
233
243
0 commit comments