Iphone 将pbm文件转换为IplImage
很明显,这段代码在最后一行CVTColor()中给出了错误,怎么了?这个功能有什么可以改进的吗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]
+(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-justMat-Mat(宽度、高度、CV_8UC4)
可以很好地完成工作,您不需要删除它
cvCvtColor(mat, rv, CV_RGBA2BGR);
CVCVTHORE期望两个代码> IPLIGECT**/Cux>s作为参数,您给它一个代码> CV::Matt*< /Cord>和一个<代码> IPLIMAGE */CODE >,这是不起作用的。用<代码>和IPLIMAGION/CODE >替换第一个<代码> Mat <代码>,或者只是始终使用C++接口。
谢谢您的输入,我的首要任务是从PBM转换成IPLION,一旦完成,我将继续清理和优化。现在的问题是,当我在ImageView中查看时,我会得到垃圾模糊的抽象图像。