c++ python opencv_从C++到Python的OpenCV垫
我需要從C++發送一個OpenCV圖像到Python來進行一些處理。
Mat將通過代碼接收,但為了簡單起見,我使用imread來回答問題。在< >我在代碼的C++部分中所做的是:#include
#include
#include
#include
#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION
using namespace cv;
using namespace std;
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
Mat image = imread("test.jpg");
Py_Initialize();
PyObject *pName, *pModule, *pDict, *pFunc, *pArgs, *pValue;
pName = PyUnicode_FromString("prog");
if (pName == NULL)
{
PyErr_Print();
return 0;
}
pModule = PyImport_Import(pName);
if (pModule == NULL)
{
PyErr_Print();
return 0;
}
pDict = PyModule_GetDict(pModule);
pFunc = PyDict_GetItemString(pDict, "add");
if (pFunc == NULL)
{
PyErr_Print();
return 0;
}
pArgs = PyTuple_New(1);
import_array ();
npy_intp dimensions[3] = {image.rows, image.cols, image.channels()};
pValue = PyArray_SimpleNewFromData(image.dims + 1, (npy_intp*)&dimensions, NPY_UINT8, image.data);
PyTuple_SetItem(pArgs, 0, pValue);
PyObject* pResult = PyObject_CallObject(pFunc, pArgs);
if(pResult == NULL)
cout<
long result = PyLong_AsLong(pResult);
cout<
Py_Finalize();
return 0;
}
這段代碼編譯并運行。在
對于Python部分:
^{pr2}$
代碼從C++接收到NUMPY數組(我想),當我打印^ {CD1>}的內容時,我有一個輸出(所以我想我正在接收C++的圖像)。在
現在我需要將a中的數據轉換成Python中的cv2 Mat,這樣我就可以處理它了。在
當我到達mat_array = cv2.fromarray(a, numpy.float32)行或vis0 = cv.fromarray(a)時,代碼將崩潰,輸出如下:Exception ignored in:
Traceback (most recent call last):
File "/usr/lib/python3.5/threading.py", line 1283, in _shutdown
assert tlock.locked()
SystemError: returned a result with an error set
如何正確發送/接收Mat對象?在
新人創作打卡挑戰賽發博客就能抽獎!定制產品紅包拿不停!總結
以上是生活随笔為你收集整理的c++ python opencv_从C++到Python的OpenCV垫的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Photoshop用户必知必会的28个快
- 下一篇: photoshop cs3反应慢的原因