@@ -10,71 +10,63 @@ namespace fastcv {
10
10
11
11
cv::Moments moments (InputArray _src, bool binary)
12
12
{
13
- INITIALIZATION_CHECK;
13
+ INITIALIZATION_CHECK;
14
14
15
15
CV_Assert (!_src.empty ());
16
16
int type = _src.type ();
17
- CV_Assert (type == CV_8UC1 || type == CV_32SC1 || type == CV_32FC1);
17
+ CV_Assert (type == CV_8UC1 || type == CV_32SC1 || type == CV_32FC1);
18
18
19
19
Size size = _src.size ();
20
20
Mat src = _src.getMat ();
21
21
22
22
cv::Moments m;
23
- if ( size.width == 0 || size.height == 0 )
24
- return m;
25
-
26
- fcvMoments* mFCV = new fcvMoments ();
23
+ fcvMoments mFCV ;
27
24
fcvStatus status = FASTCV_SUCCESS;
28
- if (binary)
25
+ if (binary)
26
+ {
27
+ cv::Mat src_binary (size, CV_8UC1);
28
+ cv::compare ( src, 0 , src_binary, cv::CMP_NE );
29
+ fcvImageMomentsu8 (src_binary.data , src_binary.cols ,
30
+ src_binary.rows , src_binary.step [0 ], &mFCV , binary);
31
+ }
32
+ else
29
33
{
30
- cv::Mat src_binary (size, CV_8UC1);
31
- cv::compare ( src, 0 , src_binary, cv::CMP_NE );
32
- fcvImageMomentsu8 (src_binary.data , src_binary.cols ,
33
- src_binary.rows , src_binary.step , mFCV , binary);
34
+ switch (type)
35
+ {
36
+ case CV_8UC1:
37
+ fcvImageMomentsu8 (src.data , src.cols , src.rows , src.step [0 ], &mFCV , binary);
38
+ break ;
39
+ case CV_32SC1:
40
+ fcvImageMomentss32 (src.ptr <int >(), src.cols , src.rows , src.step [0 ], &mFCV , binary);
41
+ break ;
42
+ case CV_32FC1:
43
+ fcvImageMomentsf32 (src.ptr <float >(), src.cols , src.rows , src.step [0 ], &mFCV , binary);
44
+ break ;
45
+ }
34
46
}
35
- else
36
- {
37
- switch (type)
38
- {
39
- case CV_8UC1:
40
- fcvImageMomentsu8 (src.data , src.cols , src.rows ,
41
- src.step , mFCV , binary);
42
- break ;
43
- case CV_32SC1:
44
- fcvImageMomentss32 ((const int *)src.data , src.cols , src.rows ,
45
- src.step , mFCV , binary);
46
- break ;
47
- case CV_32FC1:
48
- fcvImageMomentsf32 ((const float *)src.data , src.cols , src.rows ,
49
- src.step , mFCV , binary);
50
- break ;
51
- }
52
- }
53
47
54
- if (status != FASTCV_SUCCESS)
48
+ if (status != FASTCV_SUCCESS)
55
49
{
56
50
CV_Error ( cv::Error::StsError, cv::format (" Error occurred!" ) );
57
- delete mFCV ;
58
51
return m;
59
52
}
60
53
61
- m.m00 = mFCV -> m00 ; m.m10 = mFCV -> m10 ; m.m01 = mFCV -> m01 ;
62
- m.m20 = mFCV -> m20 ; m.m11 = mFCV -> m11 ; m.m02 = mFCV -> m02 ;
63
- m.m30 = mFCV -> m30 ; m.m21 = mFCV -> m21 ; m.m12 = mFCV -> m12 ;
64
- m.m03 = mFCV -> m03 ; m.mu02 = mFCV -> mu02 ; m.m03 = mFCV -> mu03 ;
65
- m.mu11 = mFCV -> mu11 ; m.mu12 = mFCV -> mu12 ; m.mu20 = mFCV -> mu20 ;
66
- m.mu21 = mFCV -> mu21 ; m.mu30 = mFCV -> mu30 ;
54
+ m.m00 = mFCV . m00 ; m.m10 = mFCV . m10 ; m.m01 = mFCV . m01 ;
55
+ m.m20 = mFCV . m20 ; m.m11 = mFCV . m11 ; m.m02 = mFCV . m02 ;
56
+ m.m30 = mFCV . m30 ; m.m21 = mFCV . m21 ; m.m12 = mFCV . m12 ;
57
+ m.m03 = mFCV . m03 ; m.mu02 = mFCV . mu02 ; m.m03 = mFCV . mu03 ;
58
+ m.mu11 = mFCV . mu11 ; m.mu12 = mFCV . mu12 ; m.mu20 = mFCV . mu20 ;
59
+ m.mu21 = mFCV . mu21 ; m.mu30 = mFCV . mu30 ;
67
60
68
- float32_t inv_m00 = 1.0 /mFCV -> m00 ;
69
- float32_t inv_sqrt_m00 = mFCV -> inv_sqrt_m00 ;
61
+ float32_t inv_m00 = 1.0 /mFCV . m00 ;
62
+ float32_t inv_sqrt_m00 = mFCV . inv_sqrt_m00 ;
70
63
float32_t s2 = inv_m00 * inv_m00, s3 = s2 * inv_sqrt_m00;
71
64
72
- m.nu20 = mFCV -> mu20 * s2; m.nu11 = mFCV -> mu11 * s2;
73
- m.nu02 = mFCV -> mu02 * s2; m.nu30 = mFCV -> mu30 * s3;
74
- m.nu21 = mFCV -> mu21 * s3; m.nu12 = mFCV -> mu12 * s3;
75
- m.nu03 = mFCV -> mu03 * s3;
65
+ m.nu20 = mFCV . mu20 * s2; m.nu11 = mFCV . mu11 * s2;
66
+ m.nu02 = mFCV . mu02 * s2; m.nu30 = mFCV . mu30 * s3;
67
+ m.nu21 = mFCV . mu21 * s3; m.nu12 = mFCV . mu12 * s3;
68
+ m.nu03 = mFCV . mu03 * s3;
76
69
77
- delete mFCV ;
78
70
return m;
79
71
}
80
72
0 commit comments