【问题标题】:Is there any conflict between opencv and tesseract?opencv和tesseract之间有什么冲突吗?
【发布时间】:2012-12-21 06:12:10
【问题描述】:

我在我的项目中使用 tesseract 和 opencv。

但问题是当我使用opencv显示图像时,只出现图像窗口,但图像没有出现,完全是灰色的。

如果我注释了tesseract相关的代码,opencv可以正常显示图像。

这太奇怪了。任何人都可以帮助我吗?

提前致谢!

#include "stdafx.h"
#include <string>
#include <opencv2/opencv.hpp>

using namespace std;
using namespace cv;


int main() {
// [1]
const char* imagename = "phototest.tif";
Mat img = imread(imagename);
if(img.empty())
{
    fprintf(stderr, "Can not load image %s\n", imagename);
    return -1;
}
imshow("image", img);

tesseract::TessBaseAPI *myOCR = 
        new tesseract::TessBaseAPI();

// [2]
printf("Tesseract-ocr version: %s\n",
       myOCR->Version());
printf("Leptonica version: %s\n",
       getLeptonicaVersion());

// [3]
if (myOCR->Init(NULL, "eng")) {
  fprintf(stderr, "Could not initialize tesseract.\n");
  exit(1);
}

// [4]
Pix *pix = pixRead("phototest.tif");
myOCR->SetImage(pix);

// [5]
char* outText = myOCR->GetUTF8Text();
printf("OCR output:\n\n");
printf(outText);

// [6]
myOCR->Clear();
myOCR->End();
delete [] outText;
pixDestroy(&pix);
system("pause");
return 0;
}   

【问题讨论】:

  • 您能否提供一个小代码 sn-p 显示您如何使用 tesseract 以及如何绘制图像?我之前用过 tesseract 和 opencv 都没有问题。
  • 好的。我已经发布了我的代码。这很简单。只想显示输入图像。

标签: c++ opencv ocr


【解决方案1】:

您可以尝试在您的 imshow 之后的某处添加一个 cv::waitkey(10),这可能会解决您的问题。 您也可以用 cv::waitkey(-1) 替换 system(pause)。

【讨论】:

  • 谢谢!有效。但它需要很长时间才能显示出来。有什么办法可以加快速度?
  • 你的图片尺寸是多少?通常它很快。你在哪里写的 cv::waitKey ?代替您的暂停还是在 imwrite 之后?图像的绘制将在 cv::waitKey 期间完成,请记住这一点。
  • 我把它放在系统(“暂停”)。但是如果我将 cv::waitKey(-1) 放在 imshow 之后,则无法打印出 tesseract 结果。有什么问题?
  • cv::waitKey(-1) 无限等待,直到你按下一个键......所以如果你在imshow之后设置它,cv::waitKey之后的代码将永远不会执行,直到你按下一个钥匙。尝试在 imshow 之后设置 cv::waitKey(10),并在 system(pause) 的位置设置一个 cv::waitKey(-1)...你的图像大小是多少?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-10
  • 2011-07-01
  • 2013-12-30
相关资源
最近更新 更多