1 /**
2 * @file core_reduce.cpp
3 * @brief It demonstrates the usage of cv::reduce .
4 *
5 * It shows how to compute the row sum, column sum, row average,
6 * column average, row minimum, column minimum, row maximum
7 * and column maximum of a cv::Mat.
8 *
9 * @author KUANG Fangjun
10 * @date August 2017
11 */
12
13 #include <iostream>
14 #include <opencv2/core.hpp>
15
16 using namespace std;
17 using namespace cv;
18
main()19 int main()
20 {
21 {
22 //! [example]
23 Mat m = (Mat_<uchar>(3,2) << 1,2,3,4,5,6);
24 Mat col_sum, row_sum;
25
26 reduce(m, col_sum, 0, REDUCE_SUM, CV_32F);
27 reduce(m, row_sum, 1, REDUCE_SUM, CV_32F);
28 /*
29 m =
30 [ 1, 2;
31 3, 4;
32 5, 6]
33 col_sum =
34 [9, 12]
35 row_sum =
36 [3;
37 7;
38 11]
39 */
40 //! [example]
41
42 Mat col_average, row_average, col_min, col_max, row_min, row_max;
43 reduce(m, col_average, 0, REDUCE_AVG, CV_32F);
44 cout << "col_average =\n" << col_average << endl;
45
46 reduce(m, row_average, 1, REDUCE_AVG, CV_32F);
47 cout << "row_average =\n" << row_average << endl;
48
49 reduce(m, col_min, 0, REDUCE_MIN, CV_8U);
50 cout << "col_min =\n" << col_min << endl;
51
52 reduce(m, row_min, 1, REDUCE_MIN, CV_8U);
53 cout << "row_min =\n" << row_min << endl;
54
55 reduce(m, col_max, 0, REDUCE_MAX, CV_8U);
56 cout << "col_max =\n" << col_max << endl;
57
58 reduce(m, row_max, 1, REDUCE_MAX, CV_8U);
59 cout << "row_max =\n" << row_max << endl;
60
61 /*
62 col_average =
63 [3, 4]
64 row_average =
65 [1.5;
66 3.5;
67 5.5]
68 col_min =
69 [ 1, 2]
70 row_min =
71 [ 1;
72 3;
73 5]
74 col_max =
75 [ 5, 6]
76 row_max =
77 [ 2;
78 4;
79 6]
80 */
81 }
82
83 {
84 //! [example2]
85 // two channels
86 char d[] = {1,2,3,4,5,6};
87 Mat m(3, 1, CV_8UC2, d);
88 Mat col_sum_per_channel;
89 reduce(m, col_sum_per_channel, 0, REDUCE_SUM, CV_32F);
90 /*
91 col_sum_per_channel =
92 [9, 12]
93 */
94 //! [example2]
95 }
96
97 return 0;
98 }
99