一、本博客基於完成環境配置情況: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@測試