上次看到OpenCV4.2的changelog之后一直想尝试一下新的图像修复重建功能,看下面显示的结果很不错,想试试是否真的如此好用。
使用前需要进行简单的CMake,因为inpaint函数在xphoto模块中,CMake时注意EXTRA_MODULES_PATH路径用/,否则会提示无法找到路径
接下来我们试试官方的例子:
#include "pch.h"#include <iostream>#include <opencv2/opencv.hpp>#include <opencv2/xphoto/inpainting.hpp>
using namespace std;using namespace cv;
int main(){ // read image and error pattern Mat original_, mask_; original_ = imread("distorted.jpg"); mask_ = imread("mask.jpg", IMREAD_GRAYSCALE); // make sure that mask and source image have the same size Mat mask; resize(mask_, mask, original_.size(), 0.0, 0.0, cv::INTER_NEAREST); // distort image Mat im_distorted(original_.size(), original_.type(), Scalar::all(0)); original_.copyTo(im_distorted, mask); // copy valid pixels only (i.e. non-zero pixels in mask) imshow("mask image", mask); // reconstruct the distorted image // choose quality profile fast (xphoto::INPAINT_FSR_FAST) or best (xphoto::INPAINT_FSR_BEST) imshow("distorted image", im_distorted); imwrite("distorted.jpg", im_distorted); Mat reconstructed; xphoto::inpaint(im_distorted, mask, reconstructed, xphoto::INPAINT_FSR_FAST); imshow("orignal image", original_); imshow("reconstructed image", reconstructed); waitKey(); return 0;}
然后你用实例里面的图片确实可以得到相同的结果,那么我们改一下测试方法,先准备正常图片如下:
然后用一段python opencv代码给原图添加文字:
import numpy as npimport cv2img = cv2.imread("test.jpg")font=cv2.FONT_HERSHEY_SIMPLEXcv2.putText(img,'OpenCV Inpaint Demo!',(20,80),font,2,(0,0,0),2cv2.putText(img,'Using OpenCV 4.2.0!',(20,180),font,2,(0,0,0),2cv2.putText(img,'OpenCV & AI_DeepLearning!',(20,280),font,1.5,(0,0,0),2)cv2.imshow("img",img)cv2.imwrite("mask.jpg",img)cv2.waitKey(0)cv2.destroyAllWindows()
那么我得到一张有文字遮挡的破损图像如下:
同样的,我知道文字的具体坐标、大小,那么我可以创建一个和原图相同大小的纯白黑色文字的mask图如下:
然后直接调用这句代码是不是就可以了?
xphoto::inpaint(im_distorted, mask, reconstructed, xphoto::INPAINT_FSR_FAST);
然而你会发现,你的破损图片还是那样,并没有被修复,究竟发生了什么?因为你用它的实例代码的时候,它会将你的原图修改成下面这样,黑色填充文字部分变成了断断续续的,这正是它想要的效果,你要有足够的边界信息给它参考修复,如果都填充了,不好意思,修复不了。。。
所以自己用的时候,我怎么知道我遇到的图像能够恰好符合它的mask要求呢?太鸡肋了。当然如果只是很细微的破损是可以直接用的,大家有兴趣不妨试试吧。
本文分享自 OpenCV与AI深度学习 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!