c++调python踩坑日志

目录

import_array();报错
矩阵互相转换
#include numpy相关vs2019配置
数组太长报错

import_array();报错

参考:https://blog.csdn.net/weixin_40232401/article/details/106944336#:~:text=%E5%9C%A8,import_array%20%28%29%E5%87%BA%E7%8E%B0%E6%8A%A5%E9%94%99%EF%BC%8C%E6%9C%89%E8%BF%94%E5%9B%9E%E5%80%BC%EF%BC%8C%E8%BF%94%E5%9B%9E%E5%80%BC%E7%B1%BB%E5%9E%8B%E4%B8%8E%E5%87%BD%E6%95%B0%E7%B1%BB%E5%9E%8B%E4%B8%8D%E5%8C%B9%E9%85%8D%EF%BC%88%E8%BF%99%E6%AE%B5%E4%BB%A3%E7%A0%81%E5%9C%A8%E7%9A%84%E5%87%BD%E6%95%B0%E6%97%A0%E8%BF%94%E5%9B%9E%E5%80%BC%EF%BC%89%E3%80%82
这里简单实现了一下QImage格式的图片转opencv mat再转,后传入python的功能。
在 import_array()出现报错,有返回值,返回值类型与函数类型不匹配(这段代码在的函数无返回值)。

解决办法:
找到\Path\to\Pythonfile\Python36\Lib\site-packages\numpy\core\include\numpy__multiarray_api.h,1548行左右,删去return NUMPY_IMPORT_ARRAY_RETVAL
https://blog.csdn.net/ganwenbo2011/article/details/89790762

编译,再出错

无法解析的外部符号 __imp___Py_RefTotal
无法解析的外部符号 __imp___Py_NegativeRefcount,该符号在函数 __import_array 中被引用
1
2
解决方法
修改两个头文件
1 注释掉object.h第56行
//#define Py_TRACE_REFS
2 pyconfig.h 337行
//# define Py_DEBUG

矩阵互相转换

// Build the 2D array
PyObject  *pReturn, *pFunc;
PyArrayObject *np_ret, *np_arg;
const int SIZE{ 10 };
npy_intp dims[2]{SIZE, SIZE};
const int ND{ 2 };
long double(*c_arr)[SIZE]{ new long double[SIZE][SIZE] };
long double* c_out;
for (int i{}; i < SIZE; i++)
    for (int j{}; j < SIZE; j++)
        c_arr[i][j] = i * SIZE + j;

PyObject* pReturn1 = PyArray_SimpleNewFromData(ND, dims, NPY_LONGDOUBLE,
    reinterpret_cast<void*>(c_arr));

np_arg = reinterpret_cast<PyArrayObject*>(pReturn1);

// Calling array_tutorial from mymodule
PyObject *pName = PyUnicode_FromString("mymodule");

PyObject* pArgs = PyTuple_New(1);
PyTuple_SetItem(pArgs, 0, reinterpret_cast<PyObject*>(np_arg));
PyObject* pReturn2 = PyEval_CallObject(pFunc1, pArgs);

#include numpy相关vs2019配置

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

数组太长报错

设置成一千万,就不报错了
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值