检测数字矩形,然后使用iOS中的ImageMagick或CoreImage进行裁剪

时间:2014-12-13 09:56:01

标签: ios objective-c image-processing imagemagick

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

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

enter image description here

但承认的输出是:

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

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

我知道 OpenCV 可以做到这一点,但不幸的是它是 C ++ 库,我不会说那种语言:(

我知道iOS8有一个新的 CIDetector 类型矩形,但我不想忽视之前版本的iOS

MY 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

非常感谢..

1 个答案:

答案 0 :(得分:0)

我会选择简单的像素搜索。由于您想要用数字裁剪白色区域,您需要做的就是找到矩形的左,右,上和下边框。如果矩形是轴对齐并且在数字周围有足够的空白区域,则应找到具有连续数量的白色像素的第一行或列。例如,要找到左边框(我猜这将是第78列),从第0列开始搜索并向右移动。对于每列计数连续的白色像素(从上到下单个循环)。连续我指的是不被黑色系列打断的系列。如果计数达到,例如80%的高度,你的左边界。相应地从右侧,顶部或底部开始并沿相反方向移动。我想有一些奇特的程序来检测矩形,但你的输入有很明显的特征。所以不要链接到某些lib我建议DIY。为了加快速度,您可以将行增加2或更多。或者您可以缩小图像,将其设置为2种颜色。

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