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