Leptonica申请门槛

我正在尝试使用leptonica的pixOtsuAdaptiveThreshold函数,但运气不大。 我不知道如果我做的是正确的,但我想采取UIImage(objective-C),应用pixOtsuAdaptiveThreshold,然后转换回UIImage。 当我用传入的参数调用pixOtsuAdaptiveThreshold时,它崩溃了。

谁能告诉我我做错了什么? 我一直在为此挣扎2天,我想我正在失去理智。 谢谢!

-(void)leptnoica:(UIImage *)image { CGImageRef myCGImage = image.CGImage; CFDataRef data = CGDataProviderCopyData(CGImageGetDataProvider(myCGImage)); const UInt8 *imageData = CFDataGetBytePtr(data); PIX *myPix = (PIX *) malloc(sizeof(PIX)); myPix->w = (int)CGImageGetWidth (myCGImage); myPix->h = (int)CGImageGetHeight (myCGImage); myPix->d = (int)CGImageGetBitsPerComponent(myCGImage); myPix->wpl = (CGImageGetBytesPerRow (myCGImage)/4); // myPix->informat = IFF_TIFF; myPix->informat= IFF_PNG; myPix->data = (l_uint32 *) imageData; myPix->colormap = NULL; l_int32 one=300; PIX *pixg; PIX *pixB; pixg = (PIX *) malloc(sizeof(PIX)); pixg=pixConvertTo8(myPix, 0); l_float32 scorefract=0.1f; pixOtsuAdaptiveThreshold(pixg, one, one, 0, 0, scorefract,NULL,&pixB); 

首先,你应该总是使用leptonica构造函数(例如pixCreate())和leptonica访问器(例如pixGetDimensions())。 切勿直接访问任何字段。 所有访问器都会testing参数,并且不会让程序崩溃,即使input错误也是如此。 查看prog目录中的一些程序,查看使用的例子。

其次,CGImage的字节可能与leptonica不同,它可能有不同的像素和行填充。 您需要了解两种数据格式并进行适当的转换。