0

iPhone で自分の OpenCV アプリの割り当てを確認したところ、カメラからの写真は約 300kb、アプリによって変換された写真は 6 MB (20 倍) かかることがわかりました。

変じゃない?UIImage を cvMat から変換するために使用している関数を見てください。

+ (UIImage *)UIImageFromCVMat:(const cv::Mat&)cvMat withOrientation:(UIImageOrientation) orientation{
    NSData *data = [NSData dataWithBytes:cvMat.data length:cvMat.elemSize() * cvMat.total()];

    CGColorSpaceRef colorSpace;

    if (cvMat.elemSize() == 1) {
        colorSpace = CGColorSpaceCreateDeviceGray();
    } else {
        colorSpace = CGColorSpaceCreateDeviceRGB();
    }

    CGDataProviderRef provider = CGDataProviderCreateWithCFData((__bridge CFDataRef)data);

    CGImageRef imageRef = CGImageCreate(cvMat.cols,                                     // Width
                                        cvMat.rows,                                     // Height
                                        8,                                              // Bits per component - ok
                                        8 * cvMat.elemSize(),                           // Bits per pixel - ok
                                        cvMat.step[0],                                  // Bytes per row - ok
                                        colorSpace,                                     // Colorspace - ok
                                        kCGImageAlphaNone | kCGBitmapByteOrderDefault,  // Bitmap info flags
                                        provider,                                       // CGDataProviderRef
                                        NULL,                                           // Decode
                                        false,                                          // Should interpolate
                                        kCGRenderingIntentDefault);                     // Intent

    UIImage *image = [[UIImage alloc] initWithCGImage:imageRef scale:1.0 orientation:orientation];
    CGImageRelease(imageRef);
    CGDataProviderRelease(provider);
    CGColorSpaceRelease(colorSpace);

    return image;
}

生成された画像が非常に大きい理由がわかりません=/

何か案は?

乾杯、

4

1 に答える 1

1

より大きなサイズが予想されます。ディスク上の画像は jpg として圧縮されている可能性が高く、圧縮レベルによってはサイズが小さくなることがあります (圧縮しすぎると品質が低下します)。

イメージがマトリックスに格納されている場合、イメージは圧縮されません。のサイズを見積もる式は次のimageとおりです。

image_size_in_bytes = image_width x image_height x number_of_channels x bit_depth

サイズが 1280 x 960 の RGB 画像があるとします。これには、ディスク上で jpeg 形式で約 220 KB のストレージが必要になる場合があります (画像の保存に使用された圧縮のレベルによって異なります)。画像を UIImage にロードすると、約 17 倍のメモリが使用されます。

1280 x 960 x 3 x 8 = 3,686,400 Bytes = 3.69 MB  
于 2013-06-09T15:20:07.947 に答える