久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

提取文本 OpenCV

Extracting text OpenCV(提取文本 OpenCV)
本文介紹了提取文本 OpenCV的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!

問題描述

我正在嘗試查找圖像中文本的邊界框,目前正在使用這種方法:

I am trying to find the bounding boxes of text in an image and am currently using this approach:

// calculate the local variances of the grayscale image
Mat t_mean, t_mean_2;
Mat grayF;
outImg_gray.convertTo(grayF, CV_32F);
int winSize = 35;
blur(grayF, t_mean, cv::Size(winSize,winSize));
blur(grayF.mul(grayF), t_mean_2, cv::Size(winSize,winSize));
Mat varMat = t_mean_2 - t_mean.mul(t_mean);
varMat.convertTo(varMat, CV_8U);

// threshold the high variance regions
Mat varMatRegions = varMat > 100;

當給出這樣的圖像時:

然后當我顯示 varMatRegions 我得到這個圖像:

Then when I show varMatRegions I get this image:

正如您所看到的,它在某種程度上將左側的文本塊與卡片的標題結合在一起,對于大多數(shù)卡片來說,這種方法效果很好,但在較繁忙的卡片上,它可能會導致問題.

As you can see it somewhat combines the left block of text with the header of the card, for most cards this method works great but on busier cards it can cause problems.

那些輪廓連接不好的原因是它使輪廓的邊界框幾乎占據(jù)了整張卡片.

The reason it is bad for those contours to connect is that it makes the bounding box of the contour nearly take up the entire card.

誰能建議我找到文本的不同方式以確保正確檢測文本?

Can anyone suggest a different way I can find the text to ensure proper detection of text?

200 分給能在卡片中找到這兩個上面的文字的人.

推薦答案

您可以通過查找關閉邊緣元素來檢測文本(靈感來自 LPD):

You can detect text by finding close edge elements (inspired from a LPD):

#include "opencv2/opencv.hpp"

std::vector<cv::Rect> detectLetters(cv::Mat img)
{
    std::vector<cv::Rect> boundRect;
    cv::Mat img_gray, img_sobel, img_threshold, element;
    cvtColor(img, img_gray, CV_BGR2GRAY);
    cv::Sobel(img_gray, img_sobel, CV_8U, 1, 0, 3, 1, 0, cv::BORDER_DEFAULT);
    cv::threshold(img_sobel, img_threshold, 0, 255, CV_THRESH_OTSU+CV_THRESH_BINARY);
    element = getStructuringElement(cv::MORPH_RECT, cv::Size(17, 3) );
    cv::morphologyEx(img_threshold, img_threshold, CV_MOP_CLOSE, element); //Does the trick
    std::vector< std::vector< cv::Point> > contours;
    cv::findContours(img_threshold, contours, 0, 1); 
    std::vector<std::vector<cv::Point> > contours_poly( contours.size() );
    for( int i = 0; i < contours.size(); i++ )
        if (contours[i].size()>100)
        { 
            cv::approxPolyDP( cv::Mat(contours[i]), contours_poly[i], 3, true );
            cv::Rect appRect( boundingRect( cv::Mat(contours_poly[i]) ));
            if (appRect.width>appRect.height) 
                boundRect.push_back(appRect);
        }
    return boundRect;
}

用法:

int main(int argc,char** argv)
{
    //Read
    cv::Mat img1=cv::imread("side_1.jpg");
    cv::Mat img2=cv::imread("side_2.jpg");
    //Detect
    std::vector<cv::Rect> letterBBoxes1=detectLetters(img1);
    std::vector<cv::Rect> letterBBoxes2=detectLetters(img2);
    //Display
    for(int i=0; i< letterBBoxes1.size(); i++)
        cv::rectangle(img1,letterBBoxes1[i],cv::Scalar(0,255,0),3,8,0);
    cv::imwrite( "imgOut1.jpg", img1);  
    for(int i=0; i< letterBBoxes2.size(); i++)
        cv::rectangle(img2,letterBBoxes2[i],cv::Scalar(0,255,0),3,8,0);
    cv::imwrite( "imgOut2.jpg", img2);  
    return 0;
}

結果:

一個.元素 = getStructuringElement(cv::MORPH_RECT, cv::Size(17, 3));

a. element = getStructuringElement(cv::MORPH_RECT, cv::Size(17, 3) );

B.元素 = getStructuringElement(cv::MORPH_RECT, cv::Size(30, 30));

b. element = getStructuringElement(cv::MORPH_RECT, cv::Size(30, 30) );

提到的其他圖像的結果相似.

Results are similar for the other image mentioned.

這篇關于提取文本 OpenCV的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!

【網站聲明】本站部分內容來源于互聯(lián)網,旨在幫助大家更快的解決問題,如果有圖片或者內容侵犯了您的權益,請聯(lián)系我們刪除處理,感謝您的支持!

相關文檔推薦

Algorithm to convert RGB to HSV and HSV to RGB in range 0-255 for both(將 RGB 轉換為 HSV 并將 HSV 轉換為 RGB 的算法,范圍為 0-255)
How to convert an enum type variable to a string?(如何將枚舉類型變量轉換為字符串?)
When to use inline function and when not to use it?(什么時候使用內聯(lián)函數(shù),什么時候不使用?)
Examples of good gotos in C or C++(C 或 C++ 中好的 goto 示例)
Significance of ios_base::sync_with_stdio(false); cin.tie(NULL);(ios_base::sync_with_stdio(false) 的意義;cin.tie(NULL);)
Is TCHAR still relevant?(TCHAR 仍然相關嗎?)
主站蜘蛛池模板: 在线视频成人 | 日韩成人在线网站 | 91精品国产综合久久久亚洲 | 午夜免费电影 | 91在线区| 亚洲区中文字幕 | 欧美在线观看网站 | 欧美成人aaa级毛片在线视频 | 狠狠色综合欧美激情 | 一区二区三区日 | av免费成人 | 国产成人精品一区二区三区 | 日本三级全黄三级三级三级口周 | 中文字幕一区二区三区精彩视频 | 香蕉一区 | 精品综合久久久 | 99riav国产一区二区三区 | 日韩在线观看中文字幕 | 国产精品久久久久久久久大全 | 成人精品免费 | 国产日韩欧美一区二区在线播放 | 国产亚洲网站 | 超碰伊人 | 精品综合久久久 | 久久久久1| 伊人免费视频二 | gav成人免费播放视频 | 日日艹夜夜艹 | 成人1区 | 亚洲欧美视频一区 | 日韩欧美一区二区三区四区 | 久久综合久久综合久久 | 日本精品久久久久久久 | .国产精品成人自产拍在线观看6 | 日本三级电影免费 | 偷拍自拍网 | 妖精视频一区二区三区 | 黄色骚片 | 国产精品美女久久久久aⅴ国产馆 | 久久精品99久久 | 亚洲精品99 |