core data -如何在iOS的CoreData中保存cvMat



我在我的项目中使用CoreData。我可以通过在我的项目中使用uiimagetodatattransformer类来保存UIImage。我也在使用opencv库,我需要保存一些cvMat结构体(它们是结构体,对吧?)。我读过一些关于transformable的帖子,但仍然不知道如何保存它在coredata和取回它。

我有一个名为"人类"的实体,它有一个名为ProjVal的属性,它的类型是可转换的,它保存cvMat的数据。

下一步该做什么?

下面是UIImage的变压器类,但我如何转换cvMat的数据?谢谢你的建议。

#import "UIImageToDataTransformer.h"
@implementation UIImageToDataTransformer
+ (BOOL)allowsReverseTransformation {
    return YES;
}
+ (Class)transformedValueClass {
    return [NSData class];
}
- (id)transformedValue:(id)value {
    return UIImagePNGRepresentation(value);
}
- (id)reverseTransformedValue:(id)value {
    return [[[UIImage alloc] initWithData:value] autorelease];
}
@end

Edit:是否将其类型用作二进制数据类型而不是可转换类型是更好的方法?我使用自动创建的类为我的实体。

我在保存

时使用此代码
CvMat *mat = cvCreateMat(3, 3, CV_32FC1);
for (int i=0; i<9; i++) {
    mat->data.fl[i] = 1.0f;
}

NSData *projValData = [[NSData alloc] initWithBytes:&mat length:sizeof(mat)];
human.projVal = projValData;

读取时:

CvMat *mat;
NSData *data =  [[humansArray objectAtIndex:0] projVal];
memcpy(&mat,[data bytes],[data length]);
if (mat) {
    NSLog(@"if mat works");
    for (int i=0; i<9; i++) {
        NSLog(@"%f",mat->data.fl[i]);
    }
}

不能很好地工作并且在for循环中崩溃。我错在哪里?

你能得到一个指针指向(和大小)你的cvMat数据的原始字节吗?

如果是,你可以在你的transformedValue:实现中使用NSData的dataWithBytes:length:类方法,在reverseTransformedValue:中使用bytes(实例)方法。

相关内容

  • 没有找到相关文章

最新更新