Opencv+tesseract+QT OCR字符识别案例

一、本博客基于完成环境配置情况:https://blog.csdn.net/stopping5/article/details/100052426

二、训练库教程请看:https://blog.csdn.net/stopping5/article/details/97317241

三、本文word版本:https://download.csdn.net/download/stopping5/11608986


目录

  1#双击ui文件 进入Qt界面布局1#双击ui文件 进入Qt界面布局

  2#编译UI文件

  3#使用opencv选择文件并且显示在label中

1#在IdCradSystem.h声明方法

 2#在idCradSystem.cpp中 将button控件id和该方法绑定,并且测试打开文件能否触发

4#使用opencv将图片转换成QImage格式显示在QT

  1#新建头文件cvmethod.h ,编写方法cvMatToQImage,实现格式转换

  2#在idcradSystem.cpp 选择文件按钮触发方法中,实现opencv读取文件并且显示在QT

  3#测试运行

#5 使用tesseract实现字符识别

           1#配置tesseract的环境变量 C:\Program Files (x86)\Tesseract-OCR

           2#在tesseract中testdata文件夹加入训练库文件,本教材使用自己训练的数字识别训练库训练过程参考前面的博客:https://blog.csdn.net/stopping5/article/details/97317241

           3#使用tesseract识别

                    1@绑定识别按钮id和触发方法,步骤如上选择文件按钮的绑定

                    2@在cvmethod.h头文件加入tesseract识别的方法

          3@在cpp中调用并且输出识别结果

          4@测试


1.配置环境:https://blog.csdn.net/stopping5/article/details/100052426

2.Opencv+tesseract+QT OCR字符识别案例

  1#双击ui文件 进入Qt界面布局1#双击ui文件 进入Qt界面布局

  2#编译UI文件

  3#使用opencv选择文件并且显示在label中

          1#在IdCradSystem.h声明方法

1#在IdCradSystem.h声明方法
//声明方法
private slots:
void on_chosePic();
};

       2#在idCradSystem.cpp中 将button控件id和该方法绑定,并且测试打开文件能否触发

4#使用opencv将图片转换成QImage格式显示在QT

             1#新建头文件cvmethod.h ,编写方法cvMatToQImage,实现格式转换

/** opencv Mat -> Qt QImage 才能显示 */
QImage cvMatToQImage(const cv::Mat& mat)
{
const unsigned char* data = mat.data;
int width = mat.cols;
int height = mat.rows;
int bytesPerLine = static_cast<int>(mat.step);
switch (mat.type())
{
// 8bit, ARGB
case CV_8UC4:
{
QImage image(data, width, height, bytesPerLine,
QImage::Format_ARGB32);
return image;
}
// 8bit, BGR
case CV_8UC3:
{
QImage image(data, width, height, bytesPerLine,
QImage::Format_RGB888);
//swap blue and red channel
return image.rgbSwapped();
}
// 8bit, Grayshale
case CV_8UC1:
{
QImage image(data, width, height, bytesPerLine,
QImage::Format_Grayscale8);
return image;
}
default:
{
return QImage();
}
}
}

2#在idcradSystem.cpp 选择文件按钮触发方法中,实现opencv读取文件并且显示在QT

void IdCradSystem::on_chosePic() {
QString fileName = QFileDialog::getOpenFileName(this,tr("文件对话框!"),
"F:",
tr("图片文件(*png *jpg);;"
"本本文件(*txt)"));
//测试是否触发
//ui.pic->setText(fileName);
 
//对话框选择——》path 路径
String path = fileName.toStdString();
//opencv读取文件
cv::Mat image = cv::imread(path);
//转换格式
QImage qimage = cvMatToQImage(image);
//显示在label中
ui.pic->setPixmap(QPixmap::fromImage(qimage));
}

3#测试运行


#5 使用tesseract实现字符识别

1#配置tesseract的环境变量 C:\Program Files (x86)\Tesseract-OCR

2#在tesseract中testdata文件夹加入训练库文件,本教材使用自己训练的数字识别训练库训练过程参考前面的博客:https://blog.csdn.net/stopping5/article/details/97317241

   

3#使用tesseract识别

1@绑定识别按钮id和触发方法,步骤如上选择文件按钮的绑定

 

2@在cvmethod.h头文件加入tesseract识别的方法

using namespace cv;

using namespace std;

using namespace ml;

//识别字符

char *tessocr(Mat image) {

// Pass it to Tesseract API

cv::cvtColor(image, image, CV_BGR2GRAY);

tesseract::TessBaseAPI tess;

//num是训练库的名称

tess.Init(NULL, "num", tesseract::OEM_DEFAULT);

tess.SetPageSegMode(tesseract::PSM_SINGLE_BLOCK);

tess.SetImage((uchar*)image.data, image.cols, image.rows, 1, image.cols);

// Get the text

char *text = tess.GetUTF8Text();

char *pResult = NULL;

tess.End();

return text;

}

3@在cpp中调用并且输出识别结果

4@测试

 


 

 

 

 

 

 

 

 

 

 

展开阅读全文
©️2020 CSDN 皮肤主题: 创作都市 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值