一、本博客基于完成环境配置情况: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界面布局
1#新建头文件cvmethod.h ,编写方法cvMatToQImage,实现格式转换
2#在idcradSystem.cpp 选择文件按钮触发方法中,实现opencv读取文件并且显示在QT
1#配置tesseract的环境变量 C:\Program Files (x86)\Tesseract-OCR
2@在cvmethod.h头文件加入tesseract识别的方法
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@测试