我有移动应用(Flutter)。这是我的用户案例:
1。我为文档拍照。这是同一类型的文档。例如:
我尝试了几种方法(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。