Qt引用python和numpy踩坑

2021-10-07 11:37:19 字數 1750 閱讀 9957

首先,.pro檔案中引入路徑

.cpp檔案

py_initialize();

import_array();

if ( !py_isinitialized() )

pyobject* pmodule = pyimport_importmodule("test0623"); // 這裡的test_py就是建立的python檔案

if (!pmodule)

pyobject* pfunrgb2gray= pyobject_getattrstring(pmodule,"rgb2gray"); // 這裡的hellow就是python檔案定義的函式

pyobject *arglist = pytuple_new(1);

cv::mat mat;

mat = cv::mat(image.height(), image.width(), cv_8uc4, (void*)image.constbits(), image.bytesperline());

auto sz = mat.size();

int x = sz.width;

int y = sz.height;

int z = mat.channels();

uchar *carrays = new uchar[x*y*z];//這一行申請的記憶體需要釋放指標,否則存在記憶體洩漏的問題

int ichannels = mat.channels();

int irows = mat.rows;

int icols = mat.cols * ichannels;

if (mat.iscontinuous())

uchar* p;

int id = -1;

for (int i = 0; i < irows; i++)

}npy_intp dims[3] = ;

pyobject *pyarray = pyarray_******newfromdata(3, dims, npy_ubyte, carrays);

pytuple_setitem(arglist, 0, pyarray);

pyobject *preturn = pyobject_callobject(pfunrgb2gray, arglist);

if (preturn) // 驗證是否呼叫成功

py_finalize();

這裡簡單實現了一下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

編譯,再出錯

無法解析的外部符號 __imp___py_reftotal    

無法解析的外部符號 __imp___py_negativerefcount,該符號在函式 __import_array 中被引用

解決方法

修改兩個標頭檔案

1 注釋掉object.h第56行

//#define py_trace_refs

2 pyconfig.h 337行

//# define py_debug

qt和python關係 Qt和Python D

qt中通常有兩種型別的小部件介面。乙個是檢視版本,另乙個是小部件版本 繼承檢視 最容易使用的是widget版本,對於您似乎正在嘗試做的事情,我建議您這樣做。在 另外,雖然你可以用你以前的方式來做軟體,但通常遵循更常見的約定會更好。我修改了您的 包括構建主視窗的方式 讓小gui使用新方法 addcar...

Python Numpy二維陣列和Numpy中的軸

二維陣列的表示方法 python原生 列表的列表 numpy ndarray pandas dataframe 二維ndarray與python list 1.ndarry效能更好 3.訪問語法差別 a 1,2 numpy ndarray a 1 2 python list numpy的軸 axis...

機器學習之旅 重要的Python庫 Numpy

numpy numerical python的簡稱 是python科學計算的基礎包。它提供了以下功能 1 快速高效的多維陣列物件ndarray 2 用於對陣列執行元素級計算以及直接對陣列執行數 算的函式 3 用於讀寫硬碟上基於陣列的資料集的工具 4 線性代數運算 傅利葉變換,以及隨機數生成 5 用於...