【问题标题】:Detect digits rectangle then crop using ImageMagick or CoreImage in iOS检测数字矩形,然后在 iOS 中使用 ImageMagick 或 CoreImage 进行裁剪
【发布时间】:2014-12-13 09:56:01
【问题描述】:

我正在开发一个 OCR 应用程序,它可以读取数字并将它们自动复制到剪贴板,而不是手动输入... 我正在使用 (TesseractOCR) ...但在识别和处理图像之前,我正在改进图像以获得更好的识别。

我使用了 ImageMagick 库,过滤后的图像如下所示:

但是识别的输出是:

446929231986789 //The first and last numbers (4 & 9) were added

所以我只想检测要裁剪的白框...

我知道 OpenCV 可以解决问题,但不幸的是它是 C++ 库,我不会说那种语言 :(

而且我知道 iOS8 有一个新的 CIDetector 类型 Rectangles 但我不想忽略以前的 iOS 版本

我的 IMAGEMAGICK 过滤器代码:

//Starting
MagickWandGenesis();
magick_wand = NewMagickWand();

//Reading the image....
NSString *tempFilePath = //Path of image

// Monochrome image 
MagickQuantizeImage(magick_wand,2,GRAYColorspace,1,MagickFalse,MagickFalse);    

// Write to temporary file
MagickWriteImage(magick_wand,
                 [tempFilePath cStringUsingEncoding:NSASCIIStringEncoding]
                 );

DestroyMagickWand(magick_wand);//Free up memory

// Load UIImage from temporary file
UIImage *imgObj = [UIImage imageWithContentsOfFile:tempFilePath];

// Display on device

非常感谢..

【问题讨论】:

  • 这不是 OCV 问题!为什么你用它来标记你的问题?
  • 谢谢@Constantine 我已经解决了

标签: ios objective-c image-processing imagemagick


【解决方案1】:

我会使用简单的像素搜索。由于您想用数字裁剪白色区域,您需要做的就是找到矩形的左、右、上和下边框。如果矩形是轴对齐的并且在数字周围有足够的空白空间,您应该找到具有连续数量的白色像素的第一行或第一列。例如,要查找左边框(我猜大概是第 78 列)从第 0 列开始搜索并向右走。对于每列计数连续的白色像素(从上到下的单个 for 循环)。连续我的意思是不被黑色打断的系列。如果计数将达到高度的 80%,那么您就有了左边框。从右侧、顶部或底部开始相应地做其余的事情,然后朝相反的方向移动。我想有一些花哨的程序可以检测矩形,但您的输入具有相当明显的特征。所以我建议不要链接到一些库,而是自己动手做。为了加快速度,您可以将行数增加 2 或更多。或者你可以缩小你的图像,将它设置为 2 种颜色。

还有另一种方法可以做到这一点。从一个角开始用白色填充。

【讨论】:

    猜你喜欢
    • 2012-05-16
    • 2018-01-27
    • 2013-02-09
    • 1970-01-01
    • 1970-01-01
    • 2015-12-04
    • 2021-09-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多