-
Notifications
You must be signed in to change notification settings - Fork 0
/
exercises_01_a_contour_extraction.cpp
60 lines (48 loc) · 1.61 KB
/
exercises_01_a_contour_extraction.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#include <stdio.h>
#include <opencv2/opencv.hpp>
/**
* Threshold with a value
* @param argc
* @param argv
* @return
*/
int main(int argc, char **argv) {
const cv::String arguments =
"{help h usage ? | | print this message }"
"{size | 2 | src value }"
"{@input_image | | image for compare }"
"{@output_image | | output image }";
cv::CommandLineParser parser(argc, argv, arguments);
parser.about("Contour extraction app v1.0.0");
if (parser.has("help")) {
parser.printMessage();
return 0;
}
cv::String input_path = parser.get<cv::String>(0);
cv::String output_path = parser.get<cv::String>(1);
int size = parser.get<int>("size");
if (!parser.check()) {
parser.printErrors();
return 0;
}
cv::Mat input = cv::imread(input_path, cv::IMREAD_GRAYSCALE);
if (!input.data) {
printf("No image data \n");
return -1;
}
// namedWindow("Input Image", cv::WINDOW_AUTOSIZE);
// imshow("Input Image", input);
// Do dilation
cv::Mat kernel = cv::getStructuringElement(cv::MORPH_RECT,
cv::Size(2 * size + 1, 2 * size + 1));
cv::Mat dilated_input = input.clone();
cv::dilate(input, dilated_input, kernel);
// Do subtraction with the dilated image
cv::Mat output = input.clone();
cv::subtract(dilated_input, input, output);
// namedWindow("Output Image", cv::WINDOW_AUTOSIZE);
// imshow("Output Image", output);
// cv::waitKey(0);
cv::imwrite(output_path, output);
return 0;
}