C ++ вызывает Python. (Python3.6 + VS2012 + opencv_python ‑ 3.4.0 ‑ cp36 ‑ cp36m ‑ win_amd64)
Я инициализирую Python в главном потоке и выполняю операторы Python во вспомогательном потоке.
Я могу обычно называть Skimage, Sklearn и Numpy в любой теме, кроме CV2. Когда я использую CV2 в подпотоке программа застрянет. Но в основном потоке можно использовать cv2.
Вот мой код
#include "Python.h"#include <process.h>
#include <string>
#include <iostream>
using namespace std;
unsigned int __stdcall TestThread(void*p)
{
if (!Py_IsInitialized())
{
cout << "error" << endl;
}
PyRun_SimpleString("import cv2");
PyRun_SimpleString("import numpy");
PyRun_SimpleString("img_str = u'D:/rgb.bmp'");
PyRun_SimpleString("imgInitial = cv2.imdecode(numpy.fromfile(img_str, dtype=numpy.uint8), -1)");
PyRun_SimpleString("print(imgInitial.shape)");
return 0;
}
void main()
{
Py_Initialize();
PyRun_SimpleString("import cv2");
PyRun_SimpleString("import numpy");
PyRun_SimpleString("img_str = u'D:/rgb.bmp'");
PyRun_SimpleString("imgInitial = cv2.imdecode(numpy.fromfile(img_str, dtype=numpy.uint8), -1)");
PyRun_SimpleString("print(imgInitial.shape)");
_beginthreadex(NULL, 0, TestThread, NULL, 0, NULL);
while(1);
}
Задача ещё не решена.
Других решений пока нет …