我有这张照片

。我正在试着把这张图片中的字母进行OCR。对于字母'9‘和'R’,我没有得到想要的结果。我先剪了这些信,

&

并执行以下命令。
tesseract 9.png stdout -psm 8
.它正在回归“。
所有其他信件的OCR工作正常,但这两封信的效果不佳(不过,我认为它们的图像质量并没有那么差)。如有任何建议/帮助,我们将不胜感激。
发布于 2015-12-09 13:49:37
我本人对tesseract没有经验,但根据google的结果,我在https://www.newocr.com/上复制了这个角色并添加了一些背景作品,后者在内部使用tesseract。
所以我用这个作为输入:

这在web应用程序上给出了正确的结果:99999999,而单个字符不起作用。也许您可以使用tesseract实现来验证这一点,也许它可以帮助您调整孤立的提取字符以使用tesseract。例如,尝试在彼此之间缝合多个提取的轮廓,以提高输出--因为你知道彼此之间缝轮廓的频率是多少,你就会知道如果它识别出相同的字符,那么输出可能是正确的。
同样的作品

边界看起来很重要,如果没有足够的边界,它就会识别P。一般来说,afaik你应该尝试用纯黑和纯白取代背景和前景!不知道网络应用程序使用的是什么预处理.
此代码可用于使用C++和OpenCV重复图像,但不会在周围添加边框。要做到这一点,您将工作非常类似,但通过一些额外的步骤,您将不得不分配一些颜色的边框。
编辑:我已经更新了代码,在每个方向使用4个像素的边框(您可以调整变量)和黑色背景色。
这段代码非常简单,对于java、python等中的opencv来说应该是非常相似的。
int main(int argc, char * argv[])
{
//cv::Mat input = cv::imread("../inputData/ocrR.png");
if(argc != 3)
{
std::cout << "usage: .exe filename #Repetitions" << std::endl;
return 0;
}
std::string filename = argv[1];
int nRepetitions = atoi(argv[2]);
cv::Mat inputImage = cv::imread(filename);
if(inputImage.empty())
{
std::cout << "image file " << filename << " could not be loaded" << std::endl;
return 0;
}
// you instead should try to extract the background color from the image (e.g. from the image border)
cv::Scalar backgroundColor(0,0,0);
// size of the border in each direction
int border = 4;
cv::Mat repeatedImage = cv::Mat(inputImage.rows + 2*border, nRepetitions*inputImage.cols + 2*border, inputImage.type() , backgroundColor);
cv::Rect roi = cv::Rect(border,border,inputImage.cols, inputImage.rows);
for(int i=0; i<nRepetitions; ++i)
{
// copy original image to subimage of repeated image
inputImage.copyTo(repeatedImage(roi));
// update roi position
roi.x += roi.width;
}
// now here you could send your repeated image to tesseract library and test whether nRepetitions times a letter was found.
cv::imwrite("repeatedImage.png", repeatedImage);
cv::imshow("repeated image" , repeatedImage);
cv::waitKey(0);
return 0;
}给出这一结果:

发布于 2015-12-09 15:13:26
我比你成功多了一点。我做了一个“连接组件分析”来提取单个字母,然后在每个提取的字母周围放置一个边框,并将它们全部附加到一条横线中,这给了我这样的感觉:

如果我运行tesseract,就会得到:
VQQTRFhttps://stackoverflow.com/questions/34176517
复制相似问题