Так а что не так то? findContours возвращает вам контуры, а вы фильтруете все контуры что меньше 100 по площади (то есть внутренние контуры у цифр будут удалены), что не правильно. Да и canny тут не нужен, тут просто стоит поиграться с порогом бинаризации (что бы оставались только белые числа на черном фоне).
Далее все так же находим связанные области и считаем их характеристики (периметр, площадь) и по ним уже проводим классификацию. Еще хороший способ классификации (а так же довольно простой) - по гистрограммам. То есть мы берем картинку, делаем бинаризацию (по цвету цифр, или, если цвета все же не равномерны, с небольшим допуском в сторону более темных цветов, тут можно поиграться) и строим гистограмму, учитывающую количество белых пикселей для каждой колонки, так можно сходу найти объекты (на вашем примере после бинаризации между каждой цифрой будут явные промежутки), то есть мы берем все промежутки, где количество белых пикселей в колонке будет равно нулю. Далее по тем же гистограммам можно проводить классификацию, для каждого символа гистограмма будет своя.