Задать вопрос
@My1Name

Как выбрать объекты на изображении по цветам?

Необходимо выделить на фотографии объекты по цветам. Как это можно сделать (без сторонних библиотек, типа OpenCV)? Что нужно проверять в первой и второй точке, чтоб правильно проверить цвет?

Я брал в первой точке (5х5) среднее значение серого (alpha) и доминирующий цвет:
double R = average(red);
double G = average(green);
double B = average(blue);
int alpha = (int) (R * 0.299 + G * 0.587 + B * 0.114);
String r = "red#"+R, g="green#"+G, b="blue#"+B;
		String [] colors = {r,g,b,"currentColor", "alpha"};
		Tools tools = new Tools();
		colors = tools.sortRGB(colors);
		String [] terms = colors[0].split("#");
		double currentColor=0;
		switch (terms[0]) {
		 	case "red" : currentColor=(R+G+B)/R; break;
		 	case "green" : currentColor=(R+G+B)/G; break;
		 	case "blue" : currentColor=(R+G+B)/B; break;
		 }
colors[3] = Double.toString(currentColor);
colors[4] = Integer.toString(alpha);
return colors;

Во второй точке берутся аналогичные параметры и сравниваются с первой точкой. Если "true" - это один массив одного цвета. "false" - создаётся новый массив для другого цвета и все действия повторяются. Работает условие while (color==true)
double digression=0;
switch (color1[0]) {
		 case "red" : digression=(R+G+B)/R; break;
		 case "green" : digression=(R+G+B)/G; break;
		 case "blue" : digression=(R+G+B)/B; break;
	}
if(alpha1==alpha2 || alpha1-alpha2>-5 && alpha1-alpha2<5)
			return true;
if (currentColor-digression<0.5 && currentColor-digression>-0.5) {
		  return true;

Такой "трюк" работает c простыми изображениями, но не с фотографиями. Может я не по тем параметрам сравниваю? Как правильно? Как выбрать объекты на фотографии по цветам?
  • Вопрос задан
  • 101 просмотр
Подписаться 1 Средний Комментировать
Пригласить эксперта
Ответы на вопрос 1
mayton2019
@mayton2019 Куратор тега Java
Bigdata Engineer
Тебе нужна функция цветовой дистанции между двумя цветами. Типа
double getDistance(int rgb1, int rgb2) {
    ....
}

Формула будет похожа на взвешенную сумму цвета как ты писал выше. Только в цветах
нужны будут разности r1 - r2 e.t.c. И взять декартово расстояние.

Она будет возрващать от 0 до некоторого максимального вещественного. Если 0 - то цвета идентичны.

Задаешь порог чувствительности например 5% и если цвета rgb1 и rgb2 близки - то соотв. считаешь
что совпадение было. Сравнивать по знаку == цвета нельзя в фотографиях. Там очень редко
бывает численное совпадение. Практически - никогда не бывает.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы