|
1 | 1 | /*
|
2 |
| - * Sample C++ to demonstrate Niblack thresholding. |
3 |
| - * |
| 2 | + * C++ sample to demonstrate Niblack thresholding. |
4 | 3 | */
|
5 | 4 |
|
6 | 5 | #include <iostream>
|
7 |
| -#include <cstdio> |
8 |
| - |
9 |
| -#include "opencv2/highgui.hpp" |
10 | 6 | #include "opencv2/core.hpp"
|
| 7 | +#include "opencv2/highgui.hpp" |
11 | 8 | #include "opencv2/imgproc.hpp"
|
12 |
| - |
13 | 9 | #include "opencv2/ximgproc.hpp"
|
14 | 10 |
|
15 | 11 | using namespace std;
|
16 | 12 | using namespace cv;
|
17 | 13 | using namespace cv::ximgproc;
|
18 | 14 |
|
19 |
| -Mat_<uchar> src, dst; |
20 |
| - |
21 |
| -const int k_max_value = 10; |
22 |
| -int k_from_slider = 0; |
23 |
| -double k_actual = 0.0; |
| 15 | +Mat_<uchar> src; |
| 16 | +int k_ = 8; |
| 17 | +int blockSize_ = 11; |
| 18 | +int type_ = THRESH_BINARY; |
24 | 19 |
|
25 | 20 | void on_trackbar(int, void*);
|
26 | 21 |
|
27 | 22 | int main(int argc, char** argv)
|
28 | 23 | {
|
29 |
| - /* |
30 |
| - * Read filename from the command-line and load |
31 |
| - * corresponding gray-scale image. |
32 |
| - */ |
| 24 | + // read gray-scale image |
33 | 25 | if(argc != 2)
|
34 | 26 | {
|
35 | 27 | cout << "Usage: ./niblack_thresholding [IMAGE]\n";
|
36 | 28 | return 1;
|
37 | 29 | }
|
38 | 30 | const char* filename = argv[1];
|
39 |
| - src = imread(filename, 1); |
40 |
| - |
41 |
| - namedWindow("k-slider", 1); |
42 |
| - string trackbar_name = "k"; |
43 |
| - createTrackbar(trackbar_name, "k-slider", &k_from_slider, k_max_value, on_trackbar); |
44 |
| - on_trackbar(k_from_slider, 0); |
45 |
| - |
| 31 | + src = imread(filename, IMREAD_GRAYSCALE); |
46 | 32 | imshow("Source", src);
|
| 33 | + |
| 34 | + namedWindow("Niblack", WINDOW_AUTOSIZE); |
| 35 | + createTrackbar("k", "Niblack", &k_, 20, on_trackbar); |
| 36 | + createTrackbar("blockSize", "Niblack", &blockSize_, 30, on_trackbar); |
| 37 | + createTrackbar("threshType", "Niblack", &type_, 4, on_trackbar); |
| 38 | + on_trackbar(0, 0); |
47 | 39 | waitKey(0);
|
48 | 40 |
|
49 | 41 | return 0;
|
50 | 42 | }
|
51 | 43 |
|
52 | 44 | void on_trackbar(int, void*)
|
53 | 45 | {
|
54 |
| - k_actual = (double)k_from_slider/k_max_value; |
55 |
| - niBlackThreshold(src, dst, 255, THRESH_BINARY, 3, k_actual); |
56 |
| - |
57 |
| - imshow("Destination", dst); |
| 46 | + double k = static_cast<double>(k_-10)/10; // [-1.0, 1.0] |
| 47 | + int blockSize = 2*(blockSize_ >= 1 ? blockSize_ : 1) + 1; // 3,5,7,...,61 |
| 48 | + int type = type_; // THRESH_BINARY, THRESH_BINARY_INV, |
| 49 | + // THRESH_TRUNC, THRESH_TOZERO, THRESH_TOZERO_INV |
| 50 | + Mat dst; |
| 51 | + niBlackThreshold(src, dst, 255, type, blockSize, k); |
| 52 | + imshow("Niblack", dst); |
58 | 53 | }
|
0 commit comments