前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >OpenCV4.2图像修复重建函数体验---鸡肋

OpenCV4.2图像修复重建函数体验---鸡肋

作者头像
Color Space
发布2020-05-19 12:46:48
7620
发布2020-05-19 12:46:48
举报
文章被收录于专栏:OpenCV与AI深度学习

上次看到OpenCV4.2的changelog之后一直想尝试一下新的图像修复重建功能,看下面显示的结果很不错,想试试是否真的如此好用。

使用前需要进行简单的CMake,因为inpaint函数在xphoto模块中,CMake时注意EXTRA_MODULES_PATH路径用/,否则会提示无法找到路径

接下来我们试试官方的例子:

代码语言:javascript
复制
#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代码给原图添加文字:

代码语言:javascript
复制
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图如下:

然后直接调用这句代码是不是就可以了?

代码语言:javascript
复制
xphoto::inpaint(im_distorted, mask, reconstructed, xphoto::INPAINT_FSR_FAST);

然而你会发现,你的破损图片还是那样,并没有被修复,究竟发生了什么?因为你用它的实例代码的时候,它会将你的原图修改成下面这样,黑色填充文字部分变成了断断续续的,这正是它想要的效果,你要有足够的边界信息给它参考修复,如果都填充了,不好意思,修复不了。。。

所以自己用的时候,我怎么知道我遇到的图像能够恰好符合它的mask要求呢?太鸡肋了。当然如果只是很细微的破损是可以直接用的,大家有兴趣不妨试试吧。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-01-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 OpenCV与AI深度学习 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档