diff --git a/modules/photo/src/inpaint.cpp b/modules/photo/src/inpaint.cpp index 66566ba2e3..14c178e248 100644 --- a/modules/photo/src/inpaint.cpp +++ b/modules/photo/src/inpaint.cpp @@ -299,7 +299,7 @@ icvTeleaInpaintFMM(const CvMat *f, CvMat *t, CvMat *out, int range, CvPriorityQu else if(q==1) {i=ii; j=jj-1;} else if(q==2) {i=ii+1; j=jj;} else if(q==3) {i=ii; j=jj+1;} - if ((i<=1)||(j<=1)||(i>t->rows-1)||(j>t->cols-1)) continue; + if ((i<=0)||(j<=0)||(i>t->rows-1)||(j>t->cols-1)) continue; if (CV_MAT_ELEM(*f,uchar,i,j)==INSIDE) { dist = min4(FastMarching_solve(i-1,j,i,j-1,f,t), @@ -411,7 +411,7 @@ icvTeleaInpaintFMM(const CvMat *f, CvMat *t, CvMat *out, int range, CvPriorityQu else if(q==1) {i=ii; j=jj-1;} else if(q==2) {i=ii+1; j=jj;} else if(q==3) {i=ii; j=jj+1;} - if ((i<=1)||(j<=1)||(i>t->rows-1)||(j>t->cols-1)) continue; + if ((i<=0)||(j<=0)||(i>t->rows-1)||(j>t->cols-1)) continue; if (CV_MAT_ELEM(*f,uchar,i,j)==INSIDE) { dist = min4(FastMarching_solve(i-1,j,i,j-1,f,t), @@ -531,7 +531,7 @@ icvNSInpaintFMM(const CvMat *f, CvMat *t, CvMat *out, int range, CvPriorityQueue else if(q==1) {i=ii; j=jj-1;} else if(q==2) {i=ii+1; j=jj;} else if(q==3) {i=ii; j=jj+1;} - if ((i<=1)||(j<=1)||(i>t->rows-1)||(j>t->cols-1)) continue; + if ((i<=0)||(j<=0)||(i>t->rows-1)||(j>t->cols-1)) continue; if (CV_MAT_ELEM(*f,uchar,i,j)==INSIDE) { dist = min4(FastMarching_solve(i-1,j,i,j-1,f,t), @@ -619,7 +619,7 @@ icvNSInpaintFMM(const CvMat *f, CvMat *t, CvMat *out, int range, CvPriorityQueue else if(q==1) {i=ii; j=jj-1;} else if(q==2) {i=ii+1; j=jj;} else if(q==3) {i=ii; j=jj+1;} - if ((i<=1)||(j<=1)||(i>t->rows-1)||(j>t->cols-1)) continue; + if ((i<=0)||(j<=0)||(i>t->rows-1)||(j>t->cols-1)) continue; if (CV_MAT_ELEM(*f,uchar,i,j)==INSIDE) { dist = min4(FastMarching_solve(i-1,j,i,j-1,f,t), diff --git a/modules/photo/test/test_inpaint.cpp b/modules/photo/test/test_inpaint.cpp index 7288501a8a..58806cbbc2 100644 --- a/modules/photo/test/test_inpaint.cpp +++ b/modules/photo/test/test_inpaint.cpp @@ -139,4 +139,22 @@ TEST_P(formats, 1c) INSTANTIATE_TEST_CASE_P(Photo_Inpaint, formats, testing::Values(CV_32F, CV_16U, CV_8U)); +TEST(Photo_InpaintBorders, regression) +{ + Mat img(64, 64, CV_8U); + img = 128; + img(Rect(0, 0, 16, 64)) = 0; + + Mat mask(64, 64, CV_8U); + mask = 0; + mask(Rect(0, 0, 16, 64)) = 255; + + Mat inpainted; + inpaint(img, mask, inpainted, 1, INPAINT_TELEA); + + Mat diff; + cv::absdiff(inpainted, 128*Mat::ones(inpainted.size(), inpainted.type()), diff); + ASSERT_TRUE(countNonZero(diff) == 0); +} + }} // namespace