一 实现步骤
1. 使用imread()加载原图
2. 对原图进行二值化
3. 统计垂直方向和水平方向的直方图
4. 把直方图投影到Mat上
5. 从直方图分割字符
二 关键代码
1 加载原图
void MainWindow::on_tbImagePath_clicked()
{
//选择原图
QFileDialog dlg(this, tr("打开文件"), homeDir(),
"Image Files(*.bmp *.jpg *.jpeg *png);;BMP Files(*.bmp);;JPG Files(*.jpg *.jpeg);;PNG File(*.png);;All Files(*)");
dlg.setFileMode(QFileDialog::ExistingFile);
dlg.setAcceptMode(QFileDialog::AcceptOpen);
QString sText;
if (dlg.exec() == QDialog::Accepted)
{
sText = dlg.selectedFiles()[0];
ui->leImagePath->setText(sText);
}
//1. 加载原图
if (!sText.isEmpty())
{
m_matSrc = imread(sText.toLatin1().data(), IMREAD_COLOR);
showImage();
}
}
2 对原图进行二值化
void MainWindow::showImage()
{
if (m_matSrc.empty()) return;
m_pScene->clear();
//1. 转成灰度图
Mat matGray;
cvtColor(m_matSrc, matGray, CV_RGB2GRAY);
//2. 把灰度图转成二值图
threshold(matGray, m_matBin, m_iThreshold, 255, THRESH_BINARY);
imwrite("/home/mark/Desktop/matBin.bmp", m_matBin);
int w = m_matSrc.cols;
int h = m_matSrc.rows;
if (m_pScene->width() != w || m_pScene->height() != h)
{
m_pScene->setSceneRect(0, 0, w, h);
ui->graphicsView->setScene(m_pScene);
}
QPixmap pix;<