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@測試

 


 

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章