Может быть, вы можете более конкретно определить масштабы и масштабы вашей работы (академический проект? Коммерческий продукт для настольных компьютеров или мобильных устройств? Коммерческий проект на основе веб-технологий?).
Matlab широко распространен в академическом мире и довольно хорош для набросков / проверки идей. У вас будет доступ к большому объему кода от других исследователей (в области CV и машинного обучения); Создание прототипов и отладка будут очень быстрыми и простыми, но все, что вы разработали в этой среде, будет трудно внедрить в производство. В зависимости от того, что делает ваш код, у вас могут возникнуть проблемы с памятью / производительностью (есть ситуации, когда вы не можете описать то, что вы хотите сделать в терминах примитивов Matlab, и вам приходится начинать циклы на пикселях, а интерпретируемый язык Matlab не является помогая в этом контексте). Взаимодействие с базами данных, веб-серверами и т. Д. Нелегко, иногда невозможно (вы не получите программу Matlab, которая станет Thrift-сервером, вызываемым веб-интерфейсом). Стоит $$$.
C ++ - это то, что используется во многих системах CV промышленного уровня (подумайте о чем-то вроде масштаба поиска изображений Google или Streetview, или многих коммерческих робототехнических приложений). Хорошие библиотеки, такие как OpenCV, отличная производительность, их легко внедрить в производственную среду. Если вам нужно заниматься машинным обучением, есть много библиотек (LibSVM / SVMlight, Torch). Если вам придется прибегнуть к коду «зацикливание на всех пикселях», он будет работать хорошо. Простота в использовании для кодирования систем / уровней хранения, необходимых в крупномасштабной поисковой системе (например, очень большая хэш-карта на диске для хранения хэшей с обратным индексным отображением для изображений). Такие вещи, как Thrift / Message Pack, могут превратить вашу поисковую программу в RPC-сервер, который может вызываться веб-интерфейсом. Однако: не очень проворный для прототипирования, довольно ужасный для того, чтобы опробовать новые идеи, медленное время разработки; и поставить в руки неопытных программистов может быть трудно отследить производительность и / или проблемы нестабильности.
Python - это нечто среднее между обоими. Вы можете использовать его для численных вычислений в стиле Matlab (с numpy и scipy) + иметь привязки к библиотекам, таким как OpenCV. С ним можно создавать системы / структуры данных и получать приемлемые характеристики. Существует довольно много пакетов машинного обучения, хотя и меньше, чем в Matlab или C ++. Если вам не придется прибегать к коду «зацикливание на всех пикселях», вы сможете закодировать практически все, что могли бы сделать с помощью C ++, с соотношением производительности 1: 1,5: 1: 3 и соотношением 2: 1: 10: 1. исходный код размера (спорно). Но в зависимости от успеха вашего проекта будет момент, когда производительность будет проблемой, и при переписывании на C ++ не будет выбора.