OpenCV中圖像修復(fù)技術(shù)介紹與演示
點擊上方“小白學(xué)視覺”,選擇加"星標(biāo)"或“置頂”
重磅干貨,第一時間送達
本文轉(zhuǎn)自:opencv學(xué)堂
現(xiàn)實中圖像經(jīng)常出現(xiàn)劃傷或者被噪聲腐蝕或者有污漬點,對于這類圖像可以通過修復(fù)(inpainting)相關(guān)的算法來說恢復(fù)損害的圖像。一般情況下這些算法都是基于污染區(qū)域的周圍已知的顏色和結(jié)構(gòu),通過繁殖和混合重新生成填充污染區(qū)域。OpenCV中實現(xiàn)的圖像修復(fù)算法有兩種。
基于Navier-Stokes的修復(fù)方法
基于圖像梯度的快速匹配方法又稱(Telea法)
對應(yīng)的兩個枚舉類型分別如下:
CV_INPAINT_NS
CV_INPAINT_TELEA
在OpenCV3.1.0中對應(yīng)的API方法為inpaint
src參數(shù)表示八位單通道或者三通道的圖像
inpaintMask參數(shù)表示8位單通道的圖像,非零像素區(qū)域表示要修復(fù)區(qū)域
dst參數(shù)表示修復(fù)后的圖像,大小類型跟輸入圖像src一致
inpaintRadius參數(shù)表示修復(fù)位置點周圍的半徑大小
flags參數(shù)表示使用的是哪種修復(fù)方法,必須是上述提到兩種方法之一。
#include <opencv2/opencv.hpp>
#include <iostream>
#include <math.h>
using namespace cv;
using namespace std;
int main(int argc, char** argv) {
Mat src = imread("D:/gloomyfish/topstar.png");
if (src.empty()) {
printf("could not load image...\n");
return -1;
}
namedWindow("污染圖像", CV_WINDOW_AUTOSIZE);
imshow("污染圖像", src);
// 獲取mask
Mat mask;
inRange(src, Scalar(0, 0, 250), Scalar(0, 0, 255), mask);
imshow("mask image", mask);
// 修復(fù)
Mat dst;
inpaint(src, mask, dst, 3, CV_INPAINT_TELEA);
namedWindow("修復(fù)圖像", CV_WINDOW_AUTOSIZE);
imshow("修復(fù)圖像", dst);
waitKey(0);
return 0;
}
效果演示


應(yīng)用實戰(zhàn) - 圖像去水印
隨便從天涯上面找了一張圖像,顯示如下:

提取水印文字【天涯社區(qū)】四個字得到結(jié)果如下:

這樣的水印區(qū)域作為模板如果直接去修復(fù)的話,效果不是很好,原因在于【天涯社區(qū)】四個水印文字是雕刻體,除了白色區(qū)域外,它周圍還有一圈灰度區(qū)域,所以通過圖像形態(tài)學(xué)操作膨脹得到如下結(jié)果:

然后直接調(diào)用修復(fù)API即可實現(xiàn)去水印,得到無水印圖像顯示如下:

水印文字【天涯社區(qū)】已經(jīng)不見啦!
對應(yīng)的演示代碼如下:
// 獲取水印mask圖像
Mat wm; // 水印文字
imshow("文字水印", src);
inRange(src, Scalar(240, 240, 240), Scalar(255, 255, 255), wm);
// 形態(tài)學(xué)操作
Mat kernel = getStructuringElement(MORPH_RECT, Size(3, 3), Point(-1, -1));
morphologyEx(wm, wm, MORPH_DILATE, kernel, Point(-1, -1), 2);
imshow("mask22", wm);
// 去水印結(jié)果
Mat tywwm;
inpaint(src, wm, tywwm, 3, CV_INPAINT_TELEA);
imshow("去水印結(jié)果", tywwm);
交流群
歡迎加入公眾號讀者群一起和同行交流,目前有SLAM、三維視覺、傳感器、自動駕駛、計算攝影、檢測、分割、識別、醫(yī)學(xué)影像、GAN、算法競賽等微信群(以后會逐漸細分),請掃描下面微信號加群,備注:”昵稱+學(xué)校/公司+研究方向“,例如:”張三 + 上海交大 + 視覺SLAM“。請按照格式備注,否則不予通過。添加成功后會根據(jù)研究方向邀請進入相關(guān)微信群。請勿在群內(nèi)發(fā)送廣告,否則會請出群,謝謝理解~

