Я бы начал с определения прямоугольной границы всего листа, а затем применил перспективное преобразование, чтобы сделать его действительно прямоугольным.Обрежьте эту часть изображения.Если это возможно, попробуйте сделать так, чтобы чередующиеся белые и серые суб прямоугольники имели одинаковую яркость фона - возможно, попробуйте адаптивное выравнивание гистограммы .
Тогда преобразование Хафа может работать лучше.В качестве альтернативы, вы можете воспользоваться подходом, который в целом похож на эту демонстрацию Роберта Бемиса на MATLAB Central (она анализирует изображение микроматрицы ДНК, а не карты лото, но, по сути, находит ограничивающие блоки предметов, расположенные в сетке).На высоком уровне подход заключается в том, чтобы рассчитать автокорреляцию вдоль столбцов и рядов пикселей, чтобы определить периодичность элементов в сетке, и использовать ее для наложения ограничивающего прямоугольника на каждый элемент.
Извините за вышеизложенноесоветы в основном основаны на MATLAB;Боюсь, я не пользователь opencv, но, надеюсь, это даст вам хотя бы некоторые идеи.