OpenCV getRectSubPix с альфа-каналом

Мне нужно использовать функцию getRectSubPix в моем коде как часть процесса обрезки вращающейся части моего изображения. Это нормально работает с 3-канальными изображениями, но как только я пытаюсь использовать его с изображением циновки BGRA или RGBA, происходит сбой, говоря мне

Ошибка OpenCV: неподдерживаемый формат или комбинация форматов () в cvGetRectSubPix, файл /home/biotracking/Downloads/OpenCV-2.4.2/modules/imgproc/src/samplers.cpp, строка 550

мой код в основном так

                cv::cvtColor(polymask, polymask, CV_BGR2BGRA);
                getRectSubPix(polymask, cv::Size(sqrt(biggestdistancesquared)*2,sqrt(biggestdistancesquared)*2), src_center, polymask);

Если эта функция действительно не работает для Mats с альфа-каналами, то это кажется сумасшедшим. Кто-нибудь знает?

2 ответа

Я заметил эту проблему и ответ @blorgggg некоторое время назад и глубоко усомнился, так как проблема связана с каналами, но ответ связан с глубиной.


Мой ответ: ошибка возникает потому, что getRectSubPix поддерживает только изображение каналов 1 или 3.

Связанный код:

if( (cn != 1 && cn != 3) || !CV_ARE_CNS_EQ( src, dst ))
    CV_Error( CV_StsUnsupportedFormat, "" );

Утверждение @luhb в потоке здесь верно, поскольку оно действительно поддерживает только изображение глубины 8 или 32, но не имеет ничего общего с вопросом здесь.

Связанный код:

if( CV_MAT_DEPTH( src->type ) != CV_8U || CV_MAT_DEPTH( dst->type ) != CV_32F )
            CV_Error( CV_StsUnsupportedFormat, "" );

Я проверяю фрагмент кода в версии 2.4/2.8/2.9.


Наконец, чтобы решить вашу проблему, вы можете сначала разделить коврик, getRectSuxPix на каждом канале, а затем объединить четыре канала.

Другой парень прибил ответ на этот вопрос в этом другом вопросе. Пользователь luhb ответил: " Открыть резюме в 16-битном формате со знаком не работает... Обрезка и изменение размера изображения"

Кажется, getRectSubPix работает только с типами {src,dst} {CV_8U, CV_8U}, {CV_32F, CV_32F} и {CV_8U, CV_32F}.

Я погружаюсь в исходный код и выясняю это. Там нет спецификации в справочнике по API.

Другие вопросы по тегам