Задача просто сводится к определению всех минимальных описывающих прямоугольников (MBR - на буржуйском).
Сканирующий поток (тот, что находит MBR'ы) для начала можно сделать только один, т.к. разбивать изображение на несколько частей опасно - можешь разбить QR код на разные части. А там все это синхронизировать между потоками дело не самое приятное. Дальше, после определения MBR, закидываешь его в пул потоков на обработку. Если задача абсолютно такая, как на изображении, то для поиска MBR, здорово подойдет какой-нибудь алгоритм построчного сканирования. Ну и выше уже сказали - OpenCV для начала.