如何按颜色查找图像中的单元格?

时间:2019-07-02 12:48:31

标签: android ios opencv flutter image-recognition

我有移动应用(Flutter)。这是我的用户案例:

1。我为文档拍照。这是同一类型的文档。例如:

enter image description here

  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。

0 个答案:

没有答案