Я пытаюсь выполнить нормализацию изображения, используя 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, и результат был таким же.
Также представлен код для этого.
С нетерпением ждем некоторой помощи. (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;
}
}
}
Я нашел решение своих проблем.
Я пытался использовать эту функцию для чтения изображения RGBA Matrix. Изображение RGBA Matrix имеет тип Vec4.
Я пытался прочитать его как Vec3 ~, который использовал эту проблему.
С этим небольшим изменением я смог получить ожидаемые результаты.