@@ -48,62 +48,65 @@ using namespace std;
48
48
49
49
int aa = 100 , ww = 10 ;
50
50
51
- Ptr<Mat> img;
52
51
const char * window_name = " Gradient Modulus" ;
53
52
54
53
static void DisplayImage (Mat x,string s)
55
54
{
56
- vector<Mat> sx;
57
- split (x, sx);
58
- vector<double > minVal (3 ), maxVal (3 );
59
- for (int i = 0 ; i < static_cast <int >(sx.size ()); i++)
60
- {
61
- minMaxLoc (sx[i], &minVal[i], &maxVal[i]);
62
- }
63
- maxVal[0 ] = *max_element (maxVal.begin (), maxVal.end ());
64
- minVal[0 ] = *min_element (minVal.begin (), minVal.end ());
65
- Mat uc;
66
- x.convertTo (uc, CV_8U,255 /(maxVal[0 ]-minVal[0 ]),-255 *minVal[0 ]/(maxVal[0 ]-minVal[0 ]));
67
- imshow (s, uc);
55
+ vector<Mat> sx;
56
+ split (x, sx);
57
+ vector<double > minVal (3 ), maxVal (3 );
58
+ for (int i = 0 ; i < static_cast <int >(sx.size ()); i++)
59
+ {
60
+ minMaxLoc (sx[i], &minVal[i], &maxVal[i]);
61
+ }
62
+ maxVal[0 ] = *max_element (maxVal.begin (), maxVal.end ());
63
+ minVal[0 ] = *min_element (minVal.begin (), minVal.end ());
64
+ Mat uc;
65
+ x.convertTo (uc, CV_8U,255 /(maxVal[0 ]-minVal[0 ]),-255 *minVal[0 ]/(maxVal[0 ]-minVal[0 ]));
66
+ imshow (s, uc);
68
67
}
69
68
70
69
71
70
/* *
72
71
* @function paillouFilter
73
72
* @brief Trackbar callback
74
73
*/
75
- static void PaillouFilter (int , void *)
74
+ static void PaillouFilter (int , void *pm )
76
75
{
76
+ Mat img = *((Mat*)pm);
77
77
Mat dst;
78
- double a=aa/100.0 ,w=ww/100.0 ;
78
+ double a=aa/100.0 , w=ww/100.0 ;
79
79
Mat rx,ry;
80
- GradientPaillouX (* img. get (), rx,a, w);
81
- GradientPaillouY (* img. get (), ry,a, w);
80
+ GradientPaillouX (img, rx, a, w);
81
+ GradientPaillouY (img, ry, a, w);
82
82
DisplayImage (rx, " Gx" );
83
83
DisplayImage (ry, " Gy" );
84
- add (rx.mul (rx),ry.mul (ry),dst);
85
- sqrt (dst,dst);
84
+ add (rx.mul (rx), ry.mul (ry), dst);
85
+ sqrt (dst, dst);
86
86
DisplayImage (dst, window_name );
87
87
}
88
88
89
89
90
90
int main (int argc, char * argv[])
91
91
{
92
- Mat *m=new Mat;
93
- if (argc == 2 )
94
- *m = imread (argv[1 ]);
95
- if (m->empty ())
92
+ if (argc < 2 )
93
+ {
94
+ cout << " usage: paillou_demo [image]" << endl;
95
+ return 1 ;
96
+ }
97
+ Mat img = imread (argv[1 ]);
98
+ if (img.empty ())
96
99
{
97
100
cout << " File not found or empty image\n " ;
101
+ return 1 ;
98
102
}
99
- img = Ptr<Mat>(m);
100
- imshow (" Original" ,*img.get ());
103
+ imshow (" Original" ,img);
101
104
namedWindow ( window_name, WINDOW_AUTOSIZE );
102
105
103
106
// / Create a Trackbar for user to enter threshold
104
- createTrackbar ( " a:" ,window_name, &aa, 400 , PaillouFilter );
105
- createTrackbar ( " w:" , window_name, &ww, 400 , PaillouFilter );
106
- PaillouFilter (0 ,NULL );
107
+ createTrackbar ( " a:" ,window_name, &aa, 400 , PaillouFilter, &img );
108
+ createTrackbar ( " w:" , window_name, &ww, 400 , PaillouFilter, &img );
109
+ PaillouFilter (0 , &img );
107
110
waitKey ();
108
111
return 0 ;
109
- }
112
+ }
0 commit comments