VS2017 QT/C++ 调用python函数传图像
原文:VS2019 C++ 调用python函数/类对象的方法_ 蜗牛在听雨的博客-CSDN博客_c++调用python函数
1、c++调用python类(传图像参数) ,编译出错,解决方法:
因为需要转换图像格式,从opencv的Mat格式转为python的PIL格式,需要用到numpy的C++接口。但是编译出错,目前看到这篇文章写的最精准,也解决了我的问题。编译错误内容:
无法解析的外部符号 __imp___Py_RefTotal
无法解析的外部符号 __imp___Py_NegativeRefcount,该符号在函数 __import_array 中被引用
2、总结如下:
1、引入头文件#include"arrayobject.h" (文件在C:\Program Files\Python36\Lib\site-packages\numpy\core\include\numpy目录下)
2、添加import_array()函数。
3、修改两个头文件object.h和pyconfig.h (文件在C:\Program Files\Python36\include目录下)
在object中,修改54行的
/* Py_DEBUG implies Py_TRACE_REFS. */
#if defined(Py_DEBUG) && !defined(Py_TRACE_REFS)
#define Py_TRACE_REFS
#endif
修改为
/* Py_DEBUG implies Py_TRACE_REFS. */
#if defined(Py_DEBUG) && !defined(Py_TRACE_REFS)
//#define Py_TRACE_REFS
#endif
在pyconfig中,修改358行的
/* Py_DEBUG implies Py_TRACE_REFS. */
#if defined(Py_DEBUG) && !defined(Py_TRACE_REFS)
//#define Py_TRACE_REFS
#endif
修改为:
#ifdef _DEBUG
//# define Py_DEBUG
#endif
代码如图所示:
3、 传图像的源代码如下:
//读图像,以array形式传递参数 Mat sml_img = imread("1.png",0);if (!sml_img.isContinuous()) { sml_img = sml_img.clone(); }npy_intp dims[] = { sml_img.rows, sml_img.cols};PyObject *pValue = PyArray_SimpleNewFromData(2, dims, NPY_UINT8, sml_img.data);//用tuple封装参数传入pythonPyObject* args = PyTuple_New(1);PyTuple_SetItem(args, 0, pValue);//返回值PyObject *pReturn = PyObject_CallObject(pFunc, args);PyArrayObject* ret_array = (PyArrayObject*)PyList_GetItem(pReturn, 0);PyArrayObject* ret_params = (PyArrayObject*) PyList_GetItem(pReturn, 1);//返回的numpy矩阵的row和colint Rows = ret_params->dimensions[0], columns = ret_params->dimensions[1];std::cout << Rows << " " << columns << std::endl;//获取py返回值,很多种方式,我只是为了解析返回的两个数组//#define out_Value(i,j) (*(npy_float64*)((PyArray_DATA(ret_params) + \//(i) * PyArray_STRIDES(ret_params)[0] + \// (j) * PyArray_STRIDES(ret_params)[1])))int a = *((int *)PyArray_GETPTR2(ret_params, 2, 1));//转换成Mat,图像显示npy_intp *shape = PyArray_SHAPE(ret_array);Mat big_img(shape[0], shape[1], CV_8UC1, PyArray_DATA(ret_array));imshow("t",big_img);waitKey(0);
VS2017 QT/C++ 调用python函数传图像相关推荐
- 【Qt】调用Python函数:无参数、单个参数、多个参数、数组参数
一.链接配置 如果缺少头文件需要安装python3-dev: sudo apt-get install python3-dev 链接libpython3.4库,添加头文件路径,以Qt为例: INCLU ...
- TX2(Linux)在Qt中调用python函数
实验环境:TX2使用JetPack-L4T-3.3-linux-x64_b39进行环境安装 详情参考:Jetpack3.3刷机 安装的python版本为3.5.2 1.创建Qt工程 在Qt中创建一个Q ...
- 【Qt】Qt中调用python接口
在Qt程序中调用python函数从步骤 1.在pro中添加python的头文件路径和库 INCLUDEPATH += /usr/include/python3.4 LIBS += -L /usr/li ...
- java调用python,传参json字符串,含中文传参
java调用python,传参json字符串 python脚本内容(test.py) # -*- coding: utf-8 -*-def main(input):return input java调 ...
- assert函数_悉数Python函数传参的语法糖
TIOBE排行榜是程序开发语言的流行使用程度的有效指标,对世界范围内开发语言的走势具有重要参考意义.随着数据挖掘.机器学习和人工智能相关概念的风行,Python一举收获2018年年度语言,这也是Pyt ...
- Qt Creator与Qt+VS2015调用Python代码的实现
下面来介绍分别用Qt Creator与Qt+VS2015调用Python代码,首先电脑中要安装Python IDE与Qt.我电脑中安装的是Python37,VS2015+Qt5.8.Qt Creato ...
- C++和Python混合编程:C++调用Python函数
文章目录 一.C++直接运行python代码的控制台Demo 二.环境配置 三.C++调用Python函数 C++传入Python的参数格式转换 C++调用Python[有参有返回值]函数 C++运行 ...
- C++调用Python函数
From: http://www.flatws.cn/article/program/c/2010-08-24/9677.html Python代码在实现某些功能的时候非常方便,如果能够将Python ...
- python中execute函数_在excel中调用python函数
效果: 通过excel引用在py文件中写好的load_settle()函数,可以快捷的获取对应的历史结算价. 使用方法: 1.首先安装office,我用的是2016版本. 2.安装python,推荐使 ...
最新文章
- 栈和堆的区别(转 知乎)
- 历年计算机一级考试题库及答案,全国计算机一级考试试题库及答案
- AWS Messaging Services:选择合适的服务
- c++心形代码_c语言心形告白代码实现
- android 4.4 屏幕方向,Android4.4屏幕旋转功能
- java安全(四) JNDI
- 一张图看懂python编程
- unity 斥力_基于绝对能量守恒原理的基础物理理论-国家科技图书文献中心.PDF
- 给定数组,查找最小的k个元素或最大的k个元素
- 大学算法分析与设计复习总结
- Ubuntu18.04下编译tslib触摸屏驱动
- JS判断不同的浏览器和版本,提示浏览器版本过低,兼容IE8到IE11
- 使用SAXReader以XML方式解析excel
- 考勤系统与服务器链接,考勤机怎么连接服务器
- Oracle数据库的备份方法
- 领克无线carplay适配方案展示
- 不要把敏感信息写在k8s的env上
- 2021年N1叉车司机复审考试及N1叉车司机模拟试题
- 寄给J.Keisler教授的一份电子生日贺卡(修正版)
- 堆、栈,队列,栈,树的个人理解和记录
热门文章
- C# 各版本新增功能
- 使用 SourceTree 操作时弹出 password required
- ubuntu和windows上pip和windows上conda国内源更新module
- JMeter基础之组件的作用域与执行顺序
- 08-09 性能测试--CPU分析
- 计算机显微视觉相关概念,机器视觉的概念及常见应用
- C语言分支结构while,C语言学习:分支结构和循环结构的总结(收藏)
- 2021 年 Angular vs. React vs. Vue 前端框架对比
- 新手学习 react 迷惑的点(完整版)
- 一些Vue开发小技巧,让你开发更便捷