c++: void inpaint(InputArray src, InputArray inpaintMask, OutputArray dst, double inpaintRadius, int flags)
第一个参数:需要输入的图像,要求为8位单通道或者三通道图像
第二个参数:修复掩膜, 八位单通道,非零像素表示要修补的区域。
第三个参数:运行的结果要和原图像有一样的尺寸。
第四个参数:需要修补的每个点的圆形邻域,为修复算法的参考半径
第五个参数:修补方法的标识符,有两种: INPAINT_NS(基于Navier-Stokes方程的方法), INPAINT_TELEA(Alexandru Telea方法)。
下面粘贴一下测试的核心代码,以及效果图
void onMouse(int event, int x, int y, int flag, void*) {
if (event == EVENT_LBUTTONDOWN || !(flag & EVENT_FLAG_LBUTTON)) {
inpaint(badImg, coverImg, dstImg, 3, INPAINT_TELEA);
first = Point(-1, -1);
imshow(WINDOW_NAME3, dstImg);
}
else if (event == EVENT_LBUTTONUP)
first = Point(x, y);
else if (event == EVENT_MOUSEMOVE) {
Point last = Point(x, y);
if (first.x < 0)
first = last;
line(badImg, first, last, Scalar(255, 255, 255),8);
line(coverImg, first, last, Scalar(255, 255, 255),8);
first = last;
imshow(WINDOW_NAME2, badImg);
}
}