В настоящее время я пытаюсь отрегулировать красные пиксели в изображении (точнее, область глаз для удаления красных глаз, вызванных вспышкой), и это хорошо работает, но проблема, иногда появляются зеленые пятна на коже.OpenCV: вычисление нового значения красного пикселя
Это хороший результат (до и после):
Я понимаю, почему это происходит, но когда я иду, чтобы настроить порог к более высокому значению (то есть красный интенсивность должна быть сильнее), меньше, красные пиксели подобраны и изменены, то есть:
чем ниже порог, тем больше гр een появляется на коже.
Мне было интересно, был ли альтернативный метод тому, что я сейчас делаю, чтобы изменить красные пиксели?
int lcount = 0;
for(int y=0;y<lcroppedEye.rows;y++)
{
for(int x=0;x<lcroppedEye.cols;x++)
{
double b = lcroppedEye.at<cv::Vec3b>(y, x)[0];
double g = lcroppedEye.at<cv::Vec3b>(y, x)[1];
double r = lcroppedEye.at<cv::Vec3b>(y, x)[2];
double redIntensity = r/((g + b)/2);
//currently causes issues with non-red-eye images
if (redIntensity >= 1.8)
{
double newRedValue = (g + b)/2;
cv::Vec3b pixelColor(newRedValue,g,b);
lroi.at<cv::Vec3b>(cv::Point(x,y)) = pixelColor;
lcount++;
}
}
}
EDIT: я могу возможно добавить в проверку, чтобы убедиться, что новые значения RGB являются достаточно низкими, и поэтому R, G, значения B подобны/близкие значения, так черные/серые пиксели выписаны только ... или иметь диапазон значений RGB (зеленоватый), которые не допускаются ... это сработает?
Ах, стена картин! Они напугали меня всерьез;) Пожалуйста, подумайте о следующем вопросе, обрезая их в нужные части. – sschrass
Извините @SatelliteSD. :/ – LKB
opencv имеет встроенный детектор глаз. вы можете замаскировать изображение и работать только в областях глаз. – baci