Почему растровое изображение toMat из openCV4Android поддерживает только RGBA_8888 и RGB_565? - PullRequest
0 голосов
/ 22 декабря 2018

Я обрабатываю некоторые 16-битные цветовые PNG-изображения в Android с помощью OpenCV, и мне необходимо преобразовать растровое изображение в Mat.Я создаю растровое изображение в формате RGBA_F16, но

bitmapToMat

работает только тогда, когда растровое изображение имеет формат ARGB_8888 и RGB_565, которые можно найти в исходном коде OpenCV

try {
        LOGD("nBitmapToMat");
        CV_Assert( AndroidBitmap_getInfo(env, bitmap, &info) >= 0 );
        CV_Assert( info.format == ANDROID_BITMAP_FORMAT_RGBA_8888 ||
                   info.format == ANDROID_BITMAP_FORMAT_RGB_565 );
        CV_Assert( AndroidBitmap_lockPixels(env, bitmap, &pixels) >= 0 );
        CV_Assert( pixels );
        dst.create(info.height, info.width, CV_8UC4);
        if( info.format == ANDROID_BITMAP_FORMAT_RGBA_8888 )
        {
            LOGD("nBitmapToMat: RGBA_8888 -> CV_8UC4");
            Mat tmp(info.height, info.width, CV_8UC4, pixels);
            if(needUnPremultiplyAlpha) cvtColor(tmp, dst, COLOR_mRGBA2RGBA);

ПочемуФормат растрового изображения ограничен RGBA_8888 и RGB_565, если я просто изменим

Mat tmp(info.height, info.width, CV_8UC4, pixels);

на

Mat tmp(info.height, info.width, CV_32FC4, pixels);

и удалю это утверждение, затем перекомпилирую OpenCV, могу ли я заставить его работать?Если нет, то как я могу преобразовать растровое изображение в мат.

Спасибо!

...