Я обрабатываю некоторые 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, могу ли я заставить его работать?Если нет, то как я могу преобразовать растровое изображение в мат.
Спасибо!