Я пытаюсь передать объект cv :: Mat из кода C++ в скрипт python, чтобы иметь с ним какие-то манипуляции (для упрощения я просто отправлю код, чтобы просто отобразить изображение).
В коде на C++ я сделал следующее:
import_array();
Mat image = imread("test.jpg");
PyObject *pName, *pModule, *pDict, *pFunc, *pArgs, *pValue;
pName = PyUnicode_FromString("test");
if (pName == NULL)
{
PyErr_Print();
break ;
}
pModule = PyImport_Import(pName);
if (pModule == NULL)
{
PyErr_Print();
break;
}
pDict = PyModule_GetDict(pModule);
pFunc = PyDict_GetItemString(pDict, "check");
if (pFunc == NULL)
{
PyErr_Print();
break;
}
pArgs = PyTuple_New(1);
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)
LERROR<<"error calling";
на стороне питона
import cv2
import numpy as np
def check(a):
image = a
print (image.shape)
print (type(image))
cv2.imshow("win",a)
return 0
shape печатается как (ширина и высота каналов), тип отображается как ndarray, но при выполнении функции imshow происходит сбой кода.
Я попробовал cv2.imread ("test.jpg") на стороне Python и получил те же результаты, когда печать формы и типа и imshow действительно работали, поэтому я думаю, что при попытке получить данные из C++ чего-то не хватает.
Это правильный способ или я что-то упускаю?
@ZdaR в обоих случаях вывод uint8
Каково значение image.dims в C++?
@Mailerdaimon image.dims = 2 в C++






Что на выходе
print image.dtype