Чисто монохромно изображение с Imagemagik в iOS

Опитвам се да създам код, който ми позволява да изчиствам изображения, които да бъдат прочетени от и OCR машина. Досега не успях да постигна много. Инсталирайте Imagemagink само на моя проект за iOS и използвайте някои от функциите на API, за да създадете изображение в сива скала.

Това, което се опитвам да постигна, е нещо подобно:

convert \( $infile -colorspace gray -type grayscale -contrast-stretch 0 \) \ \( -clone 0 -colorspace gray -negate -lat ${filtersize}x${filtersize}+${offset}% -contrast-stretch 0 \) \ -compose copy_opacity -composite -fill "$bgcolor" -opaque none +matte \ -deskew 40% -sharpen 0x1 \ $outfile

Сега проблемът е, че не успях да репликирам това в моя код. Та въпросите ми са:

  1. Някой знае ли начин за използване на метода "ConvertImageCommand()", използвайки UIImage като вход вместо път към файл? (Пример тук: http://www.imagemagick.org/discourse-server/viewtopic.php?t=25704)

  2. Като алтернатива и да продължа с действителния си код, може ли някой да ме насочи в правилната посока за преобразуване на горната команда в API метод, за да завърша кода по-долу? Досега открих, че еквивалентът на опцията "-lat" в API е: "MagickAdaptiveThresholdImage()"

за разбирането,

-(UIImage *)drawMonochromeImage:(UIImage *)image
{
    // Create temporary file
    NSString *tempFilePath = [NSTemporaryDirectory()
                              stringByAppendingPathComponent:@"temp.jpg"];

    MagickWandGenesis();
    MagickWand *wand = NewMagickWand();
    NSData *data = UIImagePNGRepresentation(image);
    MagickReadImageBlob(wand, [data bytes], [data length]);

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


    MagickDespeckleImage(wand);
    MagickEnhanceImage(wand);

    MagickQuantizeImage(wand,256,GRAYColorspace,0,MagickFalse,MagickFalse);
    MagickBrightnessContrastImage(wand,-40,30);

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

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

    // Display on device
    return imgObj;
   // [self.imageView setContentMode:UIViewContentModeScaleAspectFit];
}

person tomcontr    schedule 22.12.2014    source източник
comment
възможен дубликат на Използване на C API за ImageMagick (на iPhone?) за преобразуване в монохромен?   -  person emcconville    schedule 22.12.2014
comment
Успях да използвам кода на тази публикация и да го накарам да работи, предавайки UIImage вместо файл и след това да върна UIImage. Добавих и две други функции за подобряване на изображението и B&C. Работи, но сега трябва да мога да направя нещо подобно (код по-долу), но само с помощта на API, а не инструмента за конвертиране: convert \( $infile -colorspace gray -type grayscale -contrast-stretch 0 \) \ \( -clone 0 -colorspace gray -negate -lat ${filtersize}x${filtersize}+${offset}% -contrast-stretch 0 \) \ -compose copy_opacity -composite -fill "$bgcolor" -opaque none +matte \ -deskew 40% -sharpen 0x1 \ $outfile   -  person tomcontr    schedule 22.12.2014
comment
Страхотен! Моля, актуализирайте въпроса си с допълнителни подробности и изяснете проблема си до минимален въпрос.   -  person emcconville    schedule 22.12.2014


Отговори (1)


Най-накрая успях да използвам функцията "ConvertImageCommand()" на ImageMagick API за C и след това използвах този код, за да генерирам изображението с отлични резултати!.

char *argv[] = {"convert","-respect-parenthesis","\(", input, "-set", "-colorspace", "RGB", "-colorspace", "gray", "-type", "grayscale","-colorspace","RGB", "-normalize","\)","\(","-clone", "0","-set","-colorspace", "RGB","-colorspace","gray","-negate", "-lat", "15x15+5%", "-contrast-stretch", "0","\)","-compose","copy_opacity","-composite","-fill","white","-opaque","none","+matte", output, NULL};

Надявам се, че това може да бъде полезно за някого.

За разбирането,

person tomcontr    schedule 24.12.2014