Iphone 将pbm文件转换为IplImage

Iphone 将pbm文件转换为IplImage,iphone,ios,opencv,Iphone,Ios,Opencv,很明显,这段代码在最后一行CVTColor()中给出了错误,怎么了?这个功能有什么可以改进的吗 +(IplImage*) LoadPbmAsIplImage: (NSString*) fileName{ NSString *filePath = [[NSBundle mainBundle] pathForResource:fileName ofType:@"pbm"]; NSData *data = [NSData dataWithContentsOfFile:filePath]

很明显,这段代码在最后一行CVTColor()中给出了错误,怎么了?这个功能有什么可以改进的吗

+(IplImage*) LoadPbmAsIplImage: (NSString*) fileName{
    NSString *filePath = [[NSBundle mainBundle] pathForResource:fileName ofType:@"pbm"];
    NSData *data = [NSData dataWithContentsOfFile:filePath];
    NSString *content = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
    NSArray *lines = [content componentsSeparatedByString:@"\n"];
    NSString *secondLine = [lines objectAtIndex:1]; //because first line (index 0) contains meta data
    int width = [secondLine length];
    int height = [lines count]-1;
    Mat *mat = new Mat(width, height, CV_8UC4);
    MatIterator_<uint> it = mat->begin<uint>();
    for (int i=0; i<[lines count]; i++){
        for (int j=0; j<[[lines objectAtIndex:i] length]; j++){
            int pixelValue = 0;
            if ([[lines objectAtIndex:i] characterAtIndex:j] == '1'){
                pixelValue = 255;
            }
            *it = pixelValue;
        }
    }
    IplImage iplImage = *mat;
    IplImage* rv = cvCreateImage(cvSize(iplImage.width, iplImage.height), IPL_DEPTH_8U, 3);
    cvCvtColor(mat, rv, CV_RGBA2BGR);
    return rv;
}
+(IplImage*)加载pBMASIPlimage:(NSString*)文件名{
NSString*文件路径=[[NSBundle mainBundle]路径用于资源:文件名类型:@“pbm”];
NSData*data=[NSData dataWithContentsOfFile:filePath];
NSString*content=[[NSString alloc]initWithData:数据编码:NSUTF8StringEncoding];
NSArray*行=[content componentsSeparatedByString:@“\n”];
NSString*secondLine=[lines objectAtIndex:1];//因为第一行(索引0)包含元数据
整数宽度=[第二行长度];
int height=[行计数]-1;
垫子*垫子=新垫子(宽度、高度、CV_8UC4);
MatIterator_uuit=mat->begin();
对于(int i=0;i),你将C++接口(cv::MAT)与C接口(IPLIMAGE)混合,为什么要这样做?
Mat *mat = new Mat(width, height, CV_8UC4);
这是一个内存泄漏,您永远不会删除该映射,而且几乎没有理由使用新的创建一个Mat-just
Mat-Mat(宽度、高度、CV_8UC4)
可以很好地完成工作,您不需要删除它

cvCvtColor(mat, rv, CV_RGBA2BGR);

CVCVTHORE期望两个代码> IPLIGECT**/Cux>s作为参数,您给它一个代码> CV::Matt*< /Cord>和一个<代码> IPLIMAGE */CODE >,这是不起作用的。用<代码>和IPLIMAGION/CODE >替换第一个<代码> Mat <代码>,或者只是始终使用C++接口。

谢谢您的输入,我的首要任务是从PBM转换成IPLION,一旦完成,我将继续清理和优化。现在的问题是,当我在ImageView中查看时,我会得到垃圾模糊的抽象图像。