相关疑难解决方法(0)

OpenCV自适应阈值OCR

我正在使用OpenCV从iPhone相机准备OCR图像,我一直无法获得准确的OCR扫描所需的结果.这是我现在使用的代码.

    cv::cvtColor(cvImage, cvImage, CV_BGR2GRAY);
    cv::medianBlur(cvImage, cvImage, 0);
    cv::adaptiveThreshold(cvImage, cvImage, 255, CV_ADAPTIVE_THRESH_MEAN_C, CV_THRESH_BINARY, 5, 4);
Run Code Online (Sandbox Code Playgroud)

这种方法需要花费太长时间,并没有给我带来好的结果. 在此输入图像描述 在此输入图像描述

关于如何使这更有效的任何建议?这些图像来自iPhone相机.

在使用安德里的建议之后.

在此输入图像描述

    cv::Mat cvImage = [self cvMatFromUIImage:image];
    cv::Mat res;
    cv::cvtColor(cvImage, cvImage, CV_RGB2GRAY);
    cvImage.convertTo(cvImage,CV_32FC1,1.0/255.0);
    CalcBlockMeanVariance(cvImage,res);
    res=1.0-res;
    res=cvImage+res;
    cv::threshold(res,res, 0.85, 1, cv::THRESH_BINARY);
    cv::resize(res, res, cv::Size(res.cols/2,res.rows/2));
    image = [self UIImageFromCVMat:cvImage];
Run Code Online (Sandbox Code Playgroud)

方法:

void CalcBlockMeanVariance(cv::Mat Img,cv::Mat Res,float blockSide=21) // blockSide - the parameter (set greater for larger font on image)
{
    cv::Mat I;
    Img.convertTo(I,CV_32FC1);
    Res=cv::Mat::zeros(Img.rows/blockSide,Img.cols/blockSide,CV_32FC1);
    cv::Mat inpaintmask;
    cv::Mat patch;
    cv::Mat smallImg;
    cv::Scalar m,s;

    for(int i=0;i<Img.rows-blockSide;i+=blockSide)
    {
        for (int j=0;j<Img.cols-blockSide;j+=blockSide)
        { …
Run Code Online (Sandbox Code Playgroud)

iphone ocr opencv ios

16
推荐指数
2
解决办法
1万
查看次数

标签 统计

ios ×1

iphone ×1

ocr ×1

opencv ×1