Как выполнить нормализацию изображения RGB в Android OpenCV?

0

Я пытаюсь выполнить нормализацию изображения, используя OpenCV 2.4.8 для Android. Мое тестовое устройство - это Samsung S3.

Я написал функцию JNI, как показано ниже, чтобы выполнить нормализацию изображения.

Мое определение нормализации изображения выглядит следующим образом:

r' is 255* r/(r+g+b)
g' is 255* g/(r+g+b)
b' is 255* b/(r+g+b)

Теперь мне нужно это реализовать. И я написал функцию для этого. Кажется, это не работает. Я уверен в своих других частях своего приложения (т.е. Они без ошибок). Только эта часть вызывает проблему.

Возможно, я не написал эту функцию должным образом. Помощь Pls.

Я также добавил скриншот моего результата. Если вы посмотрите на это изображение, только половина части выглядит нормализованной (но ее на самом деле не нормализовать, она просто выглядит именно так), а другая половина - нет. Чтобы исправить это, я попытался изменить строки с cols в for-loop, и результат был таким же.

Изображение 174551

Также представлен код для этого.

С нетерпением ждем некоторой помощи. (FYI - я совершенно новичок в openCV). Спасибо за понимание.

void NormalizeRGB(JNIEnv*, jobject, jlong img)
{
    Mat& imgM  = *(Mat*)img;
    vector<Mat> rgb;
    int cols = imgM.cols;
    int rows = imgM.rows;
    for(int i = 0; i<rows; i++)
    {
        for(int j = 0; j<cols; j++)
        {
            Vec3b bgrPixel = imgM.at<Vec3b>(i, j);
            float total = bgrPixel.val[0] + bgrPixel.val[1] + bgrPixel.val[2] + 0.00001;
            bgrPixel.val[0] = (uchar) 255*bgrPixel.val[0]/total;
            bgrPixel.val[1] = (uchar) 255*bgrPixel.val[1]/total;
            bgrPixel.val[2] = (uchar) 255*bgrPixel.val[2]/total;
            imgM.at<Vec3b>(i, j) = bgrPixel;
        }
    }
}
  • 0
    Я попытался изменить тип frmo uchar на float. Я вижу некоторый эффект дрожания, но это приводит к падению примерно через 5 секунд.
  • 0
    Может быть, вы получаете значения больше 255? Вы должны сбросить значение до 255, если оно больше 255. И когда я говорю 255, я имею в виду любое значение с плавающей точкой, представляющее 255.
Показать ещё 1 комментарий
Теги:
opencv
image-processing

1 ответ

0
Лучший ответ

Я нашел решение своих проблем.

Я пытался использовать эту функцию для чтения изображения RGBA Matrix. Изображение RGBA Matrix имеет тип Vec4.

Я пытался прочитать его как Vec3 ~, который использовал эту проблему.

С этим небольшим изменением я смог получить ожидаемые результаты.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню