2017-10-16 146 views
0

我想从C++执行python脚本的OpenCV,运行Python脚本,以使用C++

C++部分:

Py_Initialize(); 
PyRun_SimpleString("import sys"); 
PyRun_SimpleString("print(sys.version)"); 
PyRun_SimpleString("sys.path.append('/path/to/module')"); 
pName = PyString_FromString("mymodule"); 
pModule = PyImport_Import(pName); 
import_array(); 
PyArrayObject *np_ret, *np_arg; 
pDict = PyModule_GetDict(pModule); 
pFunc = PyDict_GetItemString(pDict, "process"); 
PyObject_CallFunctionObjArgs(pFunc, NULL); 

Python模块:

import random 
import numpy as np 
import cv2 
import sys 
import segno 


def process(): 
    n = random.randint(1, 1000); 
    qr = segno.make(n) 
    mark = np.uint8(np.array(qr.to_pil(scale=2)))*255 
    mark = cv2.cvtColor(mark, cv2.COLOR_GRAY2RGB) 

当我与编译opencv 3.2.0它工作正常,但2.4.0调用opencv函数时会出现分段错误cv2.cvtColor(mark, cv2.COLOR_GRAY2RGB)

是否可以使用2.4.0这么做?也许有一些模块初始化程序,如import_array()为numpy?

回答

1

语法是在2.4不同,从而修改如下

mark = cv2.cvtColor(mark,mark, CV_GRAY2RGB)