最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++ OpenCV實現(xiàn)圖像去水印功能

 更新時間:2022年01月14日 08:33:42   作者:Zero___Chen  
本文將介紹如何使用OpenCV C++ 進行簡單圖像水印去除。我們在網(wǎng)上download圖片時,經(jīng)常因為版權(quán)問題有水印。本案例通過編寫算法進行簡單水印去除。需要的可以參考一下

前言

本文將使用OpenCV C++ 進行簡單圖像水印去除。我們在網(wǎng)上download圖片時,經(jīng)常因為版權(quán)問題有水印。本案例通過編寫算法進行簡單水印去除。

一、水印定位

如圖所示,圖像左下角、右下角有水印。第一步,我們首先得定位水印所在位置。

	Mat gray;
	cvtColor(src, gray, COLOR_BGR2GRAY);

	//圖像二值化,篩選出白色區(qū)域部分
	Mat thresh;
	threshold(gray, thresh, 220, 255, THRESH_BINARY);

如圖為二值化后得到的效果圖。接下來,我們需要提取水印區(qū)域的像素。

//提取圖片下方的水印,制作掩模圖像
?? ?Mat mask = Mat::zeros(src.size(), CV_8U);
?? ?int height = src.rows;
?? ?int width = src.cols;
?? ?int start = 0.9*height;
?? ?//遍歷圖像像素,提取出水印部分像素,制作掩模圖像
?? ?for (int i = start; i < height; i++)
?? ?{
?? ??? ?uchar*data = thresh.ptr<uchar>(i);
?? ??? ?for (int j = 0; j < width; j++)
?? ??? ?{
?? ??? ??? ?if (data[j] == 255)
?? ??? ??? ?{
?? ??? ??? ??? ?mask.at<uchar>(i, j) = 255;?? ??? ??? ?
?? ??? ??? ?}?? ??? ??? ?
?? ??? ?}
?? ?}

如圖所示,至此我們已經(jīng)得到水印部分的二值掩模圖像。接下來,使用OpenCV 內(nèi)置inpaint API進行圖像像素修復(fù)。具體可以參考OpenCV C++案例實戰(zhàn)十四《圖像修復(fù)》

二、圖像修復(fù)

 //使用inpaint進行圖像修復(fù)
    Mat result;
    inpaint(src, mask, result, 1, INPAINT_NS);

如圖所示,這是直接使用提取出的二值掩模進行圖像修復(fù)得到的結(jié)果,可以看出效果不是很好。原因是,提取出來的掩模未能覆蓋完全待修復(fù)像素。故我們需要將掩模圖像進行膨脹操作,擴大掩模范圍。

    //將掩模進行膨脹,使其能夠覆蓋圖像更大區(qū)域
    Mat kernel = getStructuringElement(MORPH_RECT, Size(5, 5));
    dilate(mask, mask, kernel);

如圖為進行膨脹過后的掩模圖像。這時,我們使用這張掩模圖像再進行圖像修復(fù)工作,得到效果如圖所示。

三、效果顯示

四、源碼

#include<iostream>
#include<opencv2/opencv.hpp>
using namespace std;
using namespace cv;

/*
void inpaint(
?? ??? ?InputArray src, ? 原圖
?? ??? ?InputArray inpaintMask, 二進制掩模,指示要修復(fù)的像素
?? ??? ?OutputArray dst, ?目標圖像
?? ??? ?double inpaintRadius, 像素周圍的鄰域補繪。通常,如果要修復(fù)的區(qū)域很小,則使用較小的值僅產(chǎn)生較少模糊
?? ??? ?int flags ? ? INPAINT_NS ?或 INPAINT_TELEA
?? ??? ?)
*/

/*
圖像簡單水印去除:定位到水印所在位置,將水印部分提取出來制作二進制掩模圖像,使用inpaint API進行圖像修復(fù)
*/

int main()
{
?? ?Mat src = imread("test.jpg");
?? ?if (src.empty())
?? ?{
?? ??? ?cout << "No Image!" << endl;
?? ??? ?system("pause");
?? ??? ?return -1;
?? ?}

?? ?Mat gray;
?? ?cvtColor(src, gray, COLOR_BGR2GRAY);

?? ?//圖像二值化,篩選出白色區(qū)域部分
?? ?Mat thresh;
?? ?threshold(gray, thresh, 220, 255, THRESH_BINARY);

?? ?//提取圖片下方的水印,制作掩模圖像
?? ?Mat mask = Mat::zeros(src.size(), CV_8U);
?? ?int height = src.rows;
?? ?int width = src.cols;
?? ?int start = 0.9*height;
?? ?//遍歷圖像像素,提取出水印部分像素,制作掩模圖像
?? ?for (int i = start; i < height; i++)
?? ?{
?? ??? ?uchar*data = thresh.ptr<uchar>(i);
?? ??? ?for (int j = 0; j < width; j++)
?? ??? ?{
?? ??? ??? ?if (data[j] == 255)
?? ??? ??? ?{
?? ??? ??? ??? ?mask.at<uchar>(i, j) = 255;?? ??? ??? ?
?? ??? ??? ?}?? ??? ??? ?
?? ??? ?}
?? ?}

?? ?//將掩模進行膨脹,使其能夠覆蓋圖像更大區(qū)域
?? ?Mat kernel = getStructuringElement(MORPH_RECT, Size(5, 5));
?? ?dilate(mask, mask, kernel);

?? ?//使用inpaint進行圖像修復(fù)
?? ?Mat result;
?? ?inpaint(src, mask, result, 1, INPAINT_NS);

?? ?imshow("mask", mask);
?? ?imshow("test", result);
?? ?waitKey(0);
?? ?system("pause");
?? ?return 0;
}

總結(jié)

本文使用OpenCV C++ 進行簡單圖像水印去除,關(guān)鍵步驟有以下幾點。

1、定位水印位置,制作二值掩模圖像。

2、進行圖像像素修復(fù)。

到此這篇關(guān)于C++ OpenCV實現(xiàn)圖像去水印功能的文章就介紹到這了,更多相關(guān)C++ OpenCV圖像去水印內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • MATLAB實現(xiàn)五子棋游戲(雙人對戰(zhàn)、可悔棋)

    MATLAB實現(xiàn)五子棋游戲(雙人對戰(zhàn)、可悔棋)

    這篇文章主要為大家詳細介紹了MATLAB實現(xiàn)五子棋游戲,可以進行雙人對戰(zhàn)、也可悔棋,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-06-06
  • C++ MD5的源碼實例詳解

    C++ MD5的源碼實例詳解

    這篇文章主要介紹了C++ MD5的源碼實例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-01-01
  • 矩陣的行主序與列主序的分析

    矩陣的行主序與列主序的分析

    這篇文章主要介紹了矩陣的行主序與列主序的分析的相關(guān)資料,需要的朋友可以參考下
    2017-07-07
  • C++11新特性之變長參數(shù)模板詳解

    C++11新特性之變長參數(shù)模板詳解

    本文主要介紹了C++11變長參數(shù)模板,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-08-08
  • C/C++函數(shù)調(diào)用的幾種方式總結(jié)

    C/C++函數(shù)調(diào)用的幾種方式總結(jié)

    本篇文章主要是對C/C++函數(shù)調(diào)用的幾種方式進行了詳細的總結(jié)介紹,需要的朋友可以過來參考下,希望對大家有所幫助
    2013-12-12
  • C語言入門之浮點數(shù)

    C語言入門之浮點數(shù)

    這篇文章主要為大家介紹了C語言的浮點數(shù),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-12-12
  • C++中Covariant返回值類型詳解

    C++中Covariant返回值類型詳解

    這篇文章主要介紹了C++中Covariant返回值類型詳解,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的朋友可以可以參考一下
    2022-09-09
  • C++解決輸出鏈表中倒數(shù)k個結(jié)點的問題

    C++解決輸出鏈表中倒數(shù)k個結(jié)點的問題

    這篇文章主要給大家介紹了關(guān)于如何利用C++解決輸出鏈表中倒數(shù)k個結(jié)點的問題,文中通過實例代碼介紹的非常詳細,對大家學(xué)習(xí)或者使用C++具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2021-12-12
  • EasyC++靜態(tài)持續(xù)變量

    EasyC++靜態(tài)持續(xù)變量

    這篇文章主要介紹了EasyC++靜態(tài)持續(xù)變量,除了自動存儲變量之后,C++當(dāng)中還有靜態(tài)持續(xù)變量。關(guān)于靜態(tài)持續(xù)變量的定義C++和C語言是一樣的,它擁有三種鏈接性,即外部鏈接性、內(nèi)部連接性和無鏈接性,下面一起進入文章了解更具體內(nèi)容吧
    2021-12-12
  • C++使用printf語句實現(xiàn)進制轉(zhuǎn)換的示例代碼

    C++使用printf語句實現(xiàn)進制轉(zhuǎn)換的示例代碼

    在C語言中,printf 函數(shù)可以直接實現(xiàn)部分進制轉(zhuǎn)換功能,通過格式說明符(format specifier)快速輸出不同進制的數(shù)值,下面給大家分享C++使用printf語句實現(xiàn)進制轉(zhuǎn)換的示例代碼,感興趣的朋友一起看看吧
    2025-04-04

最新評論

江永县| 武乡县| 连州市| 砚山县| 华安县| 诏安县| 长岛县| 绍兴市| 深圳市| 禹城市| 白朗县| 宝鸡市| 丘北县| 汤阴县| 绵竹市| 康乐县| 宜兰县| 名山县| 常熟市| 横山县| 阜新市| 道真| 开远市| 苍南县| 丰都县| 西和县| 姚安县| 武威市| 高密市| 得荣县| 什邡市| 镇沅| 泾阳县| 娱乐| 石城县| 将乐县| 南昌县| 淳安县| 黑龙江省| 平安县| 普兰店市|