У меня мобильное приложение (флаттер).Это мой пользовательский случай:
1. Я фотографирую документ.Это документ того же типа.Это пример:
![enter image description here](https://i.stack.imgur.com/0hIRd.png)
Мне нужно найти выбранные ячейки.
Я пробовал несколько способов (Ml Kit, OpenCv), но в конце я выбрал свой собственный алгоритм.Я решил найти клетки по цвету.
Итак, фон моего приложения «зеленый», ячейки ближе к «серому».Я сканирую все пиксели изображения - если начинается «серый» цвет, то начинаю определять координаты ячейки.Если внутри темный цвет, я ищу следующий пиксель и проверяю, серый ли он.
Работает, но у меня проблема: на фотографиях цвет "серый" может отличаться от моего стандарта, а затемалгоритм не работает правильно.
Это мой код сравнения цветов:
import 'package:image/image.dart' as img;
final ui.Color _colorGrey = ui.Color(4293717743);
double _colorDistance(ui.Color c1, ui.Color c2) {
double rmean = (c1.red + c2.red) / 2;
var r = c1.red - c2.red;
var g = c1.green - c2.green;
var b = c1.blue - c2.blue;
var tmp1 = ((512 + rmean) * r * r);
var res = sqrt((tmp1.toInt() >> 8) +
4 * g * g +
(((767 - rmean) * b * b).toInt() >> 8));
return res;
}
bool _isGrey(ui.Color curr) {
var distance = _colorDistance(curr, _colorGrey);
return (distance < 60);
}
Но на реальных фотографиях он дает ошибку в сравнении.Мне нужен более надежный алгоритм сравнения цветов или определения эталонного цвета на чертеже.
Любые идеи и предложения Буду очень признателен.
Я не использовал OpenCv, так как нет полногоПлагин для Flutter, и нет времени портировать OpenCv.