OpenCV圖像處理(13)——指定區(qū)域截取和指定區(qū)域復(fù)制

前言:
在令人討厭的的自動屏保中突然看到一張漂亮的圖片(懂就行!)归斤,就想趕緊按了鍵盤上的截屏鍵痊夭,當(dāng)發(fā)現(xiàn)無法去掉上面的文字。
于是乎脏里,圖像處理的我就和邱邱一起研究如何將其去掉她我。
思路:
該圖片上的文字和特別,特別在其實(shí)白色的迫横。白色——在cv中簡直就是最大的特征——三通道全是255Q荒选!
開始進(jìn)行:將制定文字區(qū)域截取出來员淫,直接上我的嘴子奧西最小值濾波合蔽。
效果:


帶有文字的圖像↑

去掉文字的圖像↑

代碼:
代碼就非常簡單了,使用了兩個函數(shù):(1)最小值濾波介返;(2)區(qū)域截取與復(fù)制

//功能:截取圖像IntImg的指定區(qū)域拴事,區(qū)域?yàn)椋簭模▁_stare,y_stare)坐標(biāo)開始沃斤,截取大小為 x_dustance,   y_dustance(x和y方向的尺寸)
//返回:指定區(qū)域已經(jīng)被去掉字符
Mat FilerMinEraseTxt(Mat IntImg, int x_stare, int y_stare, int x_dustance, int y_dustance)
{
    auto rect = cv::Rect(x_stare,  y_stare,  x_dustance,  y_dustance );//( 1107.291)
    Mat image_roi = IntImg(rect);
    Mat ert = MinFilterForColor(image_roi, 5);
    Mat roi = ert;
    //設(shè)置畫布繪制區(qū)域并復(fù)制
    cv::Rect roi_rect = cv::Rect(x_stare, y_stare, x_dustance, y_dustance);
    roi.copyTo(IntImg(roi_rect));//將ert這個很小的區(qū)域圖像,復(fù)制到IntImg這個大圖像中刃宵,具體的復(fù)制坐標(biāo)位置為:roi_rect這個區(qū)域
    return IntImg;
}
//功能:最小值濾波__彩色(針對白色字體的去除)
//輸入:彩色圖像衡瓶,最小值濾波的濾波核大小
Mat MinFilterForColor(Mat src, int kernel)
{
    vector<Mat>m;
    split(src, m); //提取通道信息,但是當(dāng)未把其他通道設(shè)置為0時(shí)顯示為灰度圖牲证,但各通道信息不同
    Mat R = m[0].clone();
    Mat G = m[1].clone();
    Mat B = m[2].clone();

    int r = (kernel - 1) / 2;
    Mat dst(src.size(), CV_8UC1);
    Mat dst1(src.size(), CV_8UC1);
    Mat dst2(src.size(), CV_8UC1);
    //for (int p=0;p<2;p++)
    {
        Mat dst_ex;

        copyMakeBorder(R, dst_ex, r, r, r, r, BORDER_CONSTANT, Scalar(255));
        for (int i = r; i < dst_ex.rows - r; i++)
        {
            for (int j = r; j < dst_ex.cols - r; j++)
            {
                int minVal = dst_ex.at<uchar>(i, j);
                for (int s = -r; s < r + 1; s++)
                {
                    for (int t = -r; t < r + 1; t++)
                    {
                        if (dst_ex.at<uchar>(i + s, j + t) < minVal)
                        {
                            minVal = dst_ex.at<uchar>(i + s, j + t);
                        }
                    }
                }
                dst.at<uchar>(i - r, j - r) = minVal;
            }
        }
    }

    //for (int p=0;p<2;p++)
    {
        Mat dst_ex;

        copyMakeBorder(G, dst_ex, r, r, r, r, BORDER_CONSTANT, Scalar(255));
        for (int i = r; i < dst_ex.rows - r; i++)
        {
            for (int j = r; j < dst_ex.cols - r; j++)
            {
                int minVal = dst_ex.at<uchar>(i, j);
                for (int s = -r; s < r + 1; s++)
                {
                    for (int t = -r; t < r + 1; t++)
                    {
                        if (dst_ex.at<uchar>(i + s, j + t) < minVal)
                        {
                            minVal = dst_ex.at<uchar>(i + s, j + t);
                        }
                    }
                }
                dst1.at<uchar>(i - r, j - r) = minVal;
            }
        }
    }

    //for (int p=0;p<2;p++)
    {
        Mat dst_ex;

        copyMakeBorder(B, dst_ex, r, r, r, r, BORDER_CONSTANT, Scalar(255));
        for (int i = r; i < dst_ex.rows - r; i++)
        {
            for (int j = r; j < dst_ex.cols - r; j++)
            {
                int minVal = dst_ex.at<uchar>(i, j);
                for (int s = -r; s < r + 1; s++)
                {
                    for (int t = -r; t < r + 1; t++)
                    {
                        if (dst_ex.at<uchar>(i + s, j + t) < minVal)
                        {
                            minVal = dst_ex.at<uchar>(i + s, j + t);
                        }
                    }
                }
                dst2.at<uchar>(i - r, j - r) = minVal;
            }
        }
    }
    vector<Mat>mn;
    mn.push_back(dst);
    mn.push_back(dst1);
    mn.push_back(dst2);
    Mat Rchannels;
    merge(mn, Rchannels);
    return Rchannels;
}

調(diào)用方法:

int main() 
{
    Mat src1 = cv::imread("C:\\Users\\Administrator\\Downloads\\11.bmp");
    imshow("含有文字圖像", src1);
    Mat r= FilerMinEraseTxt(src1, 827, 267, 200, 24);
    Mat r1 = FilerMinEraseTxt(r, 1026, 268, 100, 24);
    Mat r2 = FilerMinEraseTxt(r1, 907, 314, 1041 - 907, 338 - 314);
    imshow("去掉文字圖像",r2);
    waitKey(0);
}

寫在最后:
這個過程是非常簡單的哮针,不登大雅之堂,但是其思路和方法值得初學(xué)者思考坦袍。
整個代碼也沒有做任何優(yōu)化十厢,健壯性也沒有測試。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末捂齐,一起剝皮案震驚了整個濱河市蛮放,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌奠宜,老刑警劉巖包颁,帶你破解...
    沈念sama閱讀 212,080評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異压真,居然都是意外死亡娩嚼,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,422評論 3 385
  • 文/潘曉璐 我一進(jìn)店門滴肿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來岳悟,“玉大人,你說我怎么就攤上這事嘴高。” “怎么了和屎?”我有些...
    開封第一講書人閱讀 157,630評論 0 348
  • 文/不壞的土叔 我叫張陵拴驮,是天一觀的道長。 經(jīng)常有香客問我柴信,道長套啤,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,554評論 1 284
  • 正文 為了忘掉前任随常,我火速辦了婚禮潜沦,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘绪氛。我一直安慰自己唆鸡,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,662評論 6 386
  • 文/花漫 我一把揭開白布枣察。 她就那樣靜靜地躺著争占,像睡著了一般燃逻。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上臂痕,一...
    開封第一講書人閱讀 49,856評論 1 290
  • 那天伯襟,我揣著相機(jī)與錄音,去河邊找鬼握童。 笑死姆怪,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的澡绩。 我是一名探鬼主播稽揭,決...
    沈念sama閱讀 39,014評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼英古!你這毒婦竟也來了淀衣?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,752評論 0 268
  • 序言:老撾萬榮一對情侶失蹤召调,失蹤者是張志新(化名)和其女友劉穎膨桥,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體唠叛,經(jīng)...
    沈念sama閱讀 44,212評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡只嚣,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,541評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了艺沼。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片册舞。...
    茶點(diǎn)故事閱讀 38,687評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖障般,靈堂內(nèi)的尸體忽然破棺而出调鲸,到底是詐尸還是另有隱情,我是刑警寧澤挽荡,帶...
    沈念sama閱讀 34,347評論 4 331
  • 正文 年R本政府宣布藐石,位于F島的核電站,受9級特大地震影響定拟,放射性物質(zhì)發(fā)生泄漏于微。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,973評論 3 315
  • 文/蒙蒙 一青自、第九天 我趴在偏房一處隱蔽的房頂上張望株依。 院中可真熱鬧,春花似錦延窜、人聲如沸恋腕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,777評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽吗坚。三九已至祈远,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間商源,已是汗流浹背车份。 一陣腳步聲響...
    開封第一講書人閱讀 32,006評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留牡彻,地道東北人扫沼。 一個月前我還...
    沈念sama閱讀 46,406評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像庄吼,于是被迫代替她去往敵國和親缎除。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,576評論 2 349

推薦閱讀更多精彩內(nèi)容

  • 1总寻、原理 膨脹:取卷積核內(nèi)的像素最大值器罐。腐蝕:取卷積核內(nèi)的像素最小值。 去掉垂直線渐行,首先把圖像轉(zhuǎn)為二值圖像(線條為...
    行走行囊閱讀 2,263評論 0 0
  • 目標(biāo):實(shí)際公路的車道線檢測 素材中車道保持不變轰坊,車道線清晰明確,易于檢測祟印,是車道檢測的基礎(chǔ)版本肴沫,網(wǎng)上也有很多針對復(fù)...
    我堅(jiān)信陽光燦爛閱讀 726評論 1 3
  • 一、說明 根據(jù)項(xiàng)目需求蕴忆,最近在做一些技術(shù)研究相關(guān)的工作颤芬,主要是:實(shí)時(shí)獲取游戲比賽視頻中每個角色的 血量大小,以及對...
    hylccmh閱讀 5,781評論 0 4
  • 本文轉(zhuǎn)自 python數(shù)字圖像處理 圖像簡單濾波 對圖像進(jìn)行濾波套鹅,可以有兩種效果:一種是平滑濾波站蝠,用來抑制噪聲;另...
    jiandanjinxin閱讀 31,256評論 2 14
  • 1卓鹿、形態(tài)學(xué)濾波 簡單來說菱魔,形態(tài)學(xué)操作就是基于形狀的一系列圖像處理操作,最基本的形態(tài)學(xué)操作:膨脹减牺、腐蝕豌习。在圖像處理中...
    行走行囊閱讀 394評論 0 0