OPENCV2 图像修复 — 去除文字(上)

http://blog.csdn.net/learn_sunzhuli/article/details/47791273

图像修复,指对受到损坏的图像进行修复重建或者去除图像中的多余物体。 
去除文字,是图像修复的一种应用。

提出一个问题: 
给定一张自然图像,该图像上已经写了一些文字(模拟图像遭到了破坏),则如何去掉文字,使得图像恢复原来的面目?

针对上述问题,本文提供两种思路: 
方法一:先用阈值法提取图像中文字,然后用图像减法。即: 
修复图 = 原图像 – 提取的文字图 
可能碰到的问题: 
(1)阈值法的处理结果可能会导致一些误检点或者误检区域,需要再用形态学方法对阈值法提取的结果后处理。 
(2)阈值法提取文字后,提取的文字图的RGB值已经不等于原来图像中文字RGB值。而彩色图像颜色种类太多,一共有pow(2.0, 8) * pow(2.0, 8) * pow(2.0, 8) 种颜色,所以,原图像 – 提取的文字图,可能会得到一种新的颜色,并没有起到去掉文字的效果。

方法二:先用阈值法提取图像中文字,然后用OPENCV中inpaint()函数对图像修复。 
具体描述请看:http://blog.csdn.net/learn_sunzhuli/article/details/47791519

对于本文给出的图像,用方法一处理得到3张结果图。形态学处理结果图中去掉了阈值法提取结果图的一些细小误检测点。在图像减法结果图中,最外层边缘仍有红色边缘存在,而在字体中间已经变成了另外一种颜色。也就是上述描述的碰到的一些问题。这些问题都会在方法二中解决。效果图如下:

这里写图片描述

该方法具体实现代码如下,且在vs2010测试通过。

#include "opencv2/core/core.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/photo/photo.hpp"

#include <iostream>
using namespace std;
using namespace cv;

//由于在提取红色分量时,做了一个阈值处理,所以原图减去提取的文字,其结果比较差
void ImageSubtract(Mat oriImg, Mat objImg)
{
    imshow("阈值法提取结果图", objImg);
    Mat element = getStructuringElement(MORPH_RECT, Size(2, 2));
    morphologyEx(objImg, objImg, MORPH_ERODE, element);//腐蚀操作
    element = getStructuringElement(MORPH_RECT, Size(3, 3));
    morphologyEx(objImg, objImg, MORPH_DILATE, element);//膨胀操作
    imshow("形态学处理结果图", objImg);
    Mat dstImg = oriImg - objImg;//矩阵可以直接运算
    imshow("图像减法结果图", dstImg);
    waitKey(0);
}

int main(int argc, char* argv[])
{
    Mat srcImg;
    srcImg = imread("D:/openCV/data/naturalImage/data/opencv.jpg", 1);
    Mat imgComponet = GetRedComponet(srcImg);
    ImageSubtract(srcImg, imgComponet);

    return 0;
}
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值