【问题标题】:How can I save cvMat in CoreData on iOS?如何在 iOS 上的 Core Data 中保存 cv Mat?
【发布时间】:2011-08-13 07:11:50
【问题描述】:

我在我的项目中使用 CoreData。我可以在我的项目中使用 UIImageToDataTransformer 类来保存 UIImage。另外我正在使用 opencv 库,我需要保存一些 cvMat 结构(它们是结构,对吧?)。我已经阅读了一些关于可转换的帖子,但仍然无法弄清楚如何将其保存在 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

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

我在保存时使用此代码

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 循环中崩溃。我的错在哪里?

【问题讨论】:

    标签: ios core-data opencv transformable


    【解决方案1】:

    您能否获得指向 cvMat 数据的原始字节(和大小)的指针?

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

    【讨论】:

    • 我可以获得指向 cvMat 及其大小的指针,但我仍然不能在我的代码中使用它的类型。如果你的意思是这样的函数 #import "ProjValTransformer.h" @implementation ProjValTransformer + (BOOL)allowsReverseTransformation { return YES; } + (Class)transformedValueClass { return [NSData 类]; } - (id)transformedValue:(cvMat*)value { return [NSData dataWithBytes:value length:sizeof(value)]; } - (cvMat *)reverseTransformedValue:(id)value { return cvCreateMat(value.row, , ) } @end 如果我尝试这样使用 cvMat 会出错。
    猜你喜欢
    • 2012-01-17
    • 1970-01-01
    • 1970-01-01
    • 2018-05-09
    • 1970-01-01
    • 2022-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多