Многопоточность C ++ с Python Ошибка API с OpenCV - PullRequest
0 голосов
/ 22 января 2020

Я использую C ++ с Windows MF C и C ++ Python API.

В моем основном потоке GUI я импортирую сценарий Python, а затем создаю поток CHILD (подкласс CWinThread) и вызываю некоторые функции Python в том же сценарии, который я импортировал в основной поток выглядит так:

if (pFunc && PyCallable_Check(pFunc)) {
        PyObject_CallObject(pFunc, NULL);
    }
    else {
        std::cout << "Did not get the function";
    }

Функция Python, которую я вызываю, имеет строку:

x = cv2.imread('path/test.bmp', cv2.IMREAD_UNCHANGED)

Но по какой-то странной причине она просто не может когда-либо выполнить функцию с этой строкой чтения opencv. Я на 100% уверен, что путь правильный, так как я могу отлично его запустить в своей Python IDE. Еще более странным является то, что этот вызов Python в C ++ отлично работает, если я вызываю его в потоке MAIN, в отличие от потока CHILD.

Есть ли что-то, что c указывает на вызов opencv в дочерних потоках C ++ вызывая это? Это как Python GIL или что-то в этом роде? Я не могу понять, почему именно opencv сделает это.

...