@@ -73,19 +73,27 @@ PARAM_TEST_CASE(SepFilter2D, MatDepth, Channels, BorderType, bool, bool)
73
73
useRoi = GET_PARAM (4 );
74
74
}
75
75
76
- void random_roi ()
76
+ void random_roi (bool bitExact )
77
77
{
78
78
Size ksize = randomSize (kernelMinSize, kernelMaxSize);
79
79
if (1 != ksize.width % 2 )
80
80
ksize.width ++;
81
81
if (1 != ksize.height % 2 )
82
82
ksize.height ++;
83
83
84
- Mat temp = randomMat (Size (ksize.width , 1 ), CV_MAKE_TYPE (CV_32F, 1 ), -MAX_VALUE, MAX_VALUE );
84
+ Mat temp = randomMat (Size (ksize.width , 1 ), CV_32FC1, - 0.5 , 1.0 );
85
85
cv::normalize (temp, kernelX, 1.0 , 0.0 , NORM_L1);
86
- temp = randomMat (Size (1 , ksize.height ), CV_MAKE_TYPE (CV_32F, 1 ), -MAX_VALUE, MAX_VALUE );
86
+ temp = randomMat (Size (1 , ksize.height ), CV_32FC1, - 0.5 , 1.0 );
87
87
cv::normalize (temp, kernelY, 1.0 , 0.0 , NORM_L1);
88
88
89
+ if (bitExact)
90
+ {
91
+ kernelX.convertTo (temp, CV_32S, 256 );
92
+ temp.convertTo (kernelX, CV_32F, 1.0 / 256 );
93
+ kernelY.convertTo (temp, CV_32S, 256 );
94
+ temp.convertTo (kernelY, CV_32F, 1.0 / 256 );
95
+ }
96
+
89
97
Size roiSize = randomSize (ksize.width , MAX_VALUE, ksize.height , MAX_VALUE);
90
98
Border srcBorder = randomBorder (0 , useRoi ? MAX_VALUE : 0 );
91
99
randomSubMat (src, src_roi, roiSize, srcBorder, type, -MAX_VALUE, MAX_VALUE);
@@ -96,6 +104,11 @@ PARAM_TEST_CASE(SepFilter2D, MatDepth, Channels, BorderType, bool, bool)
96
104
anchor.x = anchor.y = -1 ;
97
105
delta = randomDouble (-100 , 100 );
98
106
107
+ if (bitExact)
108
+ {
109
+ delta = (int )(delta * 256 ) / 256.0 ;
110
+ }
111
+
99
112
UMAT_UPLOAD_INPUT_PARAMETER (src);
100
113
UMAT_UPLOAD_OUTPUT_PARAMETER (dst);
101
114
}
@@ -110,7 +123,7 @@ OCL_TEST_P(SepFilter2D, Mat)
110
123
{
111
124
for (int j = 0 ; j < test_loop_times + 3 ; j++)
112
125
{
113
- random_roi ();
126
+ random_roi (false );
114
127
115
128
OCL_OFF (cv::sepFilter2D (src_roi, dst_roi, -1 , kernelX, kernelY, anchor, delta, borderType));
116
129
OCL_ON (cv::sepFilter2D (usrc_roi, udst_roi, -1 , kernelX, kernelY, anchor, delta, borderType));
@@ -119,6 +132,22 @@ OCL_TEST_P(SepFilter2D, Mat)
119
132
}
120
133
}
121
134
135
+ OCL_TEST_P (SepFilter2D, Mat_BitExact)
136
+ {
137
+ for (int j = 0 ; j < test_loop_times + 3 ; j++)
138
+ {
139
+ random_roi (true );
140
+
141
+ OCL_OFF (cv::sepFilter2D (src_roi, dst_roi, -1 , kernelX, kernelY, anchor, delta, borderType));
142
+ OCL_ON (cv::sepFilter2D (usrc_roi, udst_roi, -1 , kernelX, kernelY, anchor, delta, borderType));
143
+
144
+ if (src_roi.depth () < CV_32F)
145
+ Near (0.0 );
146
+ else
147
+ Near (1e-3 );
148
+ }
149
+ }
150
+
122
151
OCL_INSTANTIATE_TEST_CASE_P (ImageProc, SepFilter2D,
123
152
Combine (
124
153
Values (CV_8U, CV_32F),
0 commit comments