Вопрос по c++, opencv, multithreading – Где я могу найти информацию об обоих форматах для написания конвертера?

4

ел бы запустить интерфейс OpenCV C ++ с использованием объектов CascadeClassifier в нескольких потоках.

Моя программа работает так, что мой основной поток загружает "some_file.xml" в объект CascadeClassifier. Три или более потоков создаются и передаются каскадному объекту. Программа вскоре вылетает после этого. Я сделал несколько тестов и пришел к выводу, что объект CascadeClassifier не является поточно-ориентированным при выполнении функции «detemultiscale».

Я хотел бы избежать чтения одного и того же файла с жесткого диска каждый раз, когда создается новый поток. Как этого можно избежать?

Ваш Ответ

1   ответ
4

сохраненным в новом формате, вы можете избежать чтения каскада из файловой системы для каждого нового потока:

Загрузите каскад в память:

cv::FileStorage fs(path_to_cascade_file, cv::FileStorage::READ);
if (!fs.isOpened())
    HandleError();

Затем передайте объект fs каждому новому потоку и создайте объект CascadeClassifier:

cv::CascadeClassifier cc;
if (!cc.read(fs.getFirstTopLevelNode())
    HandleError2();
Где я могу найти информацию об обоих форматах для написания конвертера? rossb83
Все каскады Хаара, поставляемые с OpenCV, хранятся в старом формате. И, скорее всего, они никогда не будут преобразованы в новый формат (но если вы хотите, вы можете написать конвертер и внести свой вклад). Самый простой критерий для определения нового формата - поиск по тегу<stageType>BOOST</stageType> в каскадном файле - обязательно для нового формата. Andrey Kamaev
Как вы узнаете, находится ли XML-файл в «новом» формате или нет? Все ли они были переведены в новейший формат в последнем выпуске? rossb83

Похожие вопросы