@@ -144,24 +144,31 @@ void MakeMinStMat(InputArray src, OutputArray dst, int rowStep, int colStep)
144
144
145
145
Mat src_ = src.getMat ();
146
146
Mat dst_ = dst.getMat ();
147
+ int rowLim = src.rows () - rowStep;
148
+ int colChLim = (src.cols () - colStep) * src.channels ();
149
+ int borderSkipStep = colStep * src.channels ();
150
+
147
151
uchar* srcPtr1 = src_.ptr <uchar>(0 , 0 );
148
152
uchar* srcPtr2 = src_.ptr <uchar>(rowStep, colStep);
149
153
uchar* dstPtr = dst_.ptr <uchar>(0 , 0 );
150
- for (int row = 0 ; row < src. rows () - rowStep ; row++)
154
+ for (int row = 0 ; row < rowLim ; row++)
151
155
{
152
- for (int col = 0 ; col < src. cols () - colStep; col ++)
156
+ for (int colCh = 0 ; colCh < colChLim; colCh ++)
153
157
{
154
- for ( int c = 0 ; c < src. channels (); c++ )
158
+ if (*srcPtr1 < *srcPtr2 )
155
159
{
156
- *dstPtr = min (*srcPtr1, *srcPtr2);
157
- srcPtr1++;
160
+ *dstPtr++ = *srcPtr1++;
158
161
srcPtr2++;
159
- dstPtr++;
162
+ }
163
+ else
164
+ {
165
+ *dstPtr++ = *srcPtr2++;
166
+ srcPtr1++;
160
167
}
161
168
}
162
- srcPtr1 += colStep * src. channels () ;
163
- srcPtr2 += colStep * src. channels () ;
164
- dstPtr += colStep * src. channels () ;
169
+ srcPtr1 += borderSkipStep ;
170
+ srcPtr2 += borderSkipStep ;
171
+ dstPtr += borderSkipStep ;
165
172
}
166
173
}
167
174
void MakeMaxStMat (InputArray src, OutputArray dst, int rowStep, int colStep)
@@ -275,25 +282,22 @@ void erode(InputArray _src, OutputArray _dst, InputArray _kernel,
275
282
}
276
283
277
284
// 結果構築
278
- int aaa; // ???
279
285
for (int i = 0 ; i < powerOf2Rects.size (); i++)
280
286
{
281
287
Rect rect = powerOf2Rects[i];
282
- Mat* sparseMat = st[rect.height ][rect.width ];
283
- uchar* srcPtr = sparseMat->ptr () + sparseMat->step .p [0 ] * rect.y + sparseMat->step .p [1 ] * rect.x ;
284
- uchar* dstPtr = dst.ptr ();
285
- int sideBorderSkipStep = (kernel.cols - 1 ) * sparseMat->step .p [1 ];
288
+ Mat sparseMat = *st[rect.height ][rect.width ];
289
+ int sideBorderSkipStep = (kernel.cols - 1 ) * sparseMat.step .p [1 ];
290
+ int colChLim = src.cols * src.channels ();
286
291
292
+ uchar* srcPtr = sparseMat.ptr (rect.y , rect.x );
293
+ uchar* dstPtr = dst.ptr ();
287
294
for (int row = 0 ; row < src.rows ; row++)
288
295
{
289
- for (int col = 0 ; col < src. cols ; col++)
296
+ for (int col = 0 ; col < colChLim ; col++)
290
297
{
291
- for (int c = 0 ; c < src.channels (); c++)
292
- {
293
- *dstPtr = min (*dstPtr, *srcPtr);
294
- srcPtr++;
295
- dstPtr++;
296
- }
298
+ if (*srcPtr < *dstPtr) *dstPtr = *srcPtr;
299
+ srcPtr++;
300
+ dstPtr++;
297
301
}
298
302
srcPtr += sideBorderSkipStep;
299
303
}
0 commit comments