@@ -223,26 +223,29 @@ int MNNSR::process(const cv::Mat &inimage, cv::Mat &outimage, const cv::Mat &mas
223223
224224 int xPrepadding = prepadding, yPrepadding = prepadding;
225225
226+ // 待重新分配的像素数
226227 int left = inWidth % tileWidth;
227- if (left > 0 ) {
228+ if (xtiles > 1 && left > 0 ) {
229+ // fprintf(stderr, "process, xtiles=( (%d + %d - 1) / %d)=%d, left=%d, prepadding=%d\n",
230+ // inWidth, tileWidth, tileWidth, xtiles, left, prepadding);
228231 if (left < prepadding) {
229232 // 倒数第2个tile的prepadding已经包含了推理结果
230233 xtiles--;
231234 } else {
232- if (left / 2 <= prepadding)
235+ if (( left + 1 ) / 2 <= prepadding)
233236 xtiles--;
234237 // xtiles * (tilesize - 2 * xPrepadding) + xPrepadding = inWidth
235238 xPrepadding = (xtiles * tilesize - inWidth) / (2 * xtiles - 1 );
236239 tileWidth = tilesize - xPrepadding * 2 ;
237240 }
238241 }
239242 left = inHeight % tileHeight;
240- if (left > 0 ) {
243+ if (ytiles > 1 && left > 0 ) {
241244 if (left < prepadding) {
242245 // 倒数第2个tile的prepadding已经包含了推理结果
243246 ytiles--;
244247 } else {
245- if (left / 2 <= prepadding)
248+ if (( left + 1 ) / 2 <= prepadding)
246249 ytiles--;
247250 // ytiles * (tilesize - 2 * yPrepadding) + yPrepadding = inHeight
248251 yPrepadding = (ytiles * tilesize - inHeight) / (2 * ytiles - 1 );
@@ -336,8 +339,8 @@ int MNNSR::process(const cv::Mat &inimage, cv::Mat &outimage, const cv::Mat &mas
336339 int l = (xi == 0 ) ? xPrepadding : 0 ;
337340 int r = tilesize + in_tile_x0 - in_tile_x1 - l;
338341
339- // fprintf(stderr, "process y=%d, x=%d copyMakeBorder %d %d %d %d\n", yi, xi, t, b, l ,
340- // r );
342+ // fprintf(stderr, "process y=%d, x=%d copyMakeBorder %d %d %d %d, %d %d \n", yi, xi, t,
343+ // b, l, r, inputTile.cols, inputTile.rows );
341344// cv::Mat paddedTile;
342345 cv::copyMakeBorder (inputTile, paddedTile, t, b, l, r, cv::BORDER_CONSTANT);
343346
@@ -346,6 +349,8 @@ int MNNSR::process(const cv::Mat &inimage, cv::Mat &outimage, const cv::Mat &mas
346349 input_tensor);
347350
348351 } else {
352+ // fprintf(stderr, "process y=%d, x=%d copyMakeBorder 0, %d %d\n", yi, xi,
353+ // inputTile.cols, inputTile.rows);
349354// cv::Mat paddedTile;
350355 cv::copyMakeBorder (inputTile, paddedTile, 0 , 0 , 0 , 0 , cv::BORDER_CONSTANT);
351356
0 commit comments