c++ python opencv_从C++到Python的OpenCV垫
我需要從C++發(fā)送一個(gè)OpenCV圖像到Python來(lái)進(jìn)行一些處理。
Mat將通過(guò)代碼接收,但為了簡(jiǎn)單起見(jiàn),我使用imread來(lái)回答問(wèn)題。在< >我在代碼的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;
}
這段代碼編譯并運(yùn)行。在
對(duì)于Python部分:
^{pr2}$
代碼從C++接收到NUMPY數(shù)組(我想),當(dāng)我打印^ {CD1>}的內(nèi)容時(shí),我有一個(gè)輸出(所以我想我正在接收C++的圖像)。在
現(xiàn)在我需要將a中的數(shù)據(jù)轉(zhuǎn)換成Python中的cv2 Mat,這樣我就可以處理它了。在
當(dāng)我到達(dá)mat_array = cv2.fromarray(a, numpy.float32)行或vis0 = cv.fromarray(a)時(shí),代碼將崩潰,輸出如下: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
如何正確發(fā)送/接收Mat對(duì)象?在
新人創(chuàng)作打卡挑戰(zhàn)賽發(fā)博客就能抽獎(jiǎng)!定制產(chǎn)品紅包拿不停!總結(jié)
以上是生活随笔為你收集整理的c++ python opencv_从C++到Python的OpenCV垫的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Photoshop用户必知必会的28个快
- 下一篇: python 数据库查询系统_pytho