#include "widget.h"
#include <QApplication>
#include <Python.h>
#include <opencv2/opencv.hpp>
#include <QApplication>
#include <iostream>
#include <numpy/ndarrayobject.h>
#include <QDebug>
using namespace std;
using namespace cv;
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
// 设置主目录,就是python的主目录
Py_SetPythonHome(L"D:\\Anaconda3\\envs\\python38");
// 初始化python模块
Py_Initialize();
import_array();
// 判定是否初始化成功
if(!Py_IsInitialized())
{
cout<<"初始化python环境失败!"<<endl;
return -1;
}
/*
* 测试初始化后的python环境,自测使用
PyRun_SimpleString("import sys");//引入sys模块
PyRun_SimpleString("sys.path.append('./')");//将存放python文件的路径加入搜寻路径
PyRun_SimpleString("import numpy as np");
PyRun_SimpleString("import os");
PyRun_SimpleString("from datetime import datetime, time");
PyRun_SimpleString("print(\"hello python\")");
cout << "point1" << endl;
*/
// 将python文件导入成PyObject对象,func是python文件的名称,此处不要加.py
PyObject* m_pyObj = PyImport_ImportModule("func");
// 获取函数,myfunc表示调用的python文件内的myfunc函数
PyObject *pFunc = PyObject_GetAttrString(m_pyObj, "myfunc");
/*
* 简单调用测试,测试python文件是否调用成功
QString inputPara = "this is paras";
//调用python中的Myfun函数,返回值是ret,s代表是字符串格式,如果是int则写i,double写d
auto ret = PyObject_CallMethod(m_pyObj, "myfunc", "i", 2);
*/
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 读取一张图像
cv::Mat image = cv::imread("E:\\companyFiles\\PythonWorkSpace\\20221104Project\\3.jpeg");
// 打印图像的大小
cout<<image.size()<< endl;
// 保存图像大小
auto sz = image.size();
int x = sz.width;
int y = sz.height;
int z = image.channels();
//注意这个维度数据!
npy_intp Dims[3] = {y, x, z};
cout<<"point2"<<endl;
cout << Dims[0] << endl;
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int array_x = 3;
int array_y = 3;
// 定义二维数组
double CArrays[3][3] = {{1.3, 2.4, 5.6}, {4.5, 7.8, 8.9}, {1.7, 0.4, 0.8}};
// 设置维度数据
npy_intp Dims_array[2] = {3, 3};
int nElem_array = 3 * 3;
uchar* m_array = new uchar[nElem_array];
// 将数组复制到新建的数组中
std::memcpy(m_array, image.data, nElem_array * sizeof(uchar));
// 生成包含这个多维数组的PyObject对象,使用PyArray_SimpleNewFromData函数,第一个参数3表示维度,第二个为维度数组Dims,第三个参数指出数组的类型,第四个参数为数组
PyObject *PyArray_array = PyArray_SimpleNewFromData(2, Dims_array, NPY_DOUBLE, (void*)m_array);
// 创建一个大小为1的元组对象
PyObject *ArgArray_array = PyTuple_New(1);
// 设置Tuple的某一个元素,参数为索引index和要传入的PyObject对象
PyTuple_SetItem(ArgArray_array, 0, PyArray_array);
// 调用函数,传入Numpy Array 对象。
PyObject_CallObject(pFunc, ArgArray_array);
//调用函数,传入Numpy Array 对象。
PyObject_CallMethod(m_pyObj, "myfunc1", "O", PyArray_array);
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 所有像素点的数量,要乘以通道数,灰度图单通道,彩色图三通道
int nElem = x * y * z;
// 创建与像素个数大小相同的数组
uchar* m = new uchar[nElem];
// 将Mat格式矩阵数据复制到新建的数组中
std::memcpy(m, image.data, nElem * sizeof(uchar));
// 生成包含这个多维数组的PyObject对象,使用PyArray_SimpleNewFromData函数,第一个参数3表示维度,第二个为维度数组Dims,第三个参数指出数组的类型,第四个参数为数组
PyObject *PyArray = PyArray_SimpleNewFromData(3, Dims, NPY_UINT8, (void*)m);
// 创建一个大小为1的元组对象
PyObject *ArgArray = PyTuple_New(1);
// 设置Tuple的某一个元素,参数为索引index和要传入的PyObject对象
PyTuple_SetItem(ArgArray, 0, PyArray);
// 调用函数,传入Numpy Array 对象。
PyObject_CallObject(pFunc, ArgArray);
//调用函数,传入Numpy Array 对象。
PyObject *rest = PyObject_CallMethod(m_pyObj, "myfunc", "O", PyArray);
// 获取返回值
if(rest)
{
PyObject *repr = PyObject_Repr(rest);
PyObject *imgfrompy = PyUnicode_AsEncodedString(repr, "utf-8", "strict");
char *result = PyBytes_AsString(imgfrompy);
// 打印返回值
qDebug()<<result<<"end"<<endl;
}
Py_Finalize();
Widget w;
w.show();
return a.exec();
}
没有合适的资源?快使用搜索试试~ 我知道了~
QT调用python处理图像

共19个文件
h:3个
cpp:3个
o:3个


温馨提示
QT读取图像,将Mat矩阵作为参数传递给python,利用python进行图像的计算。同时将二维数组作为参数传递到python中,作为两个参数传递的例子。python处理完成的图像进行返回,由QT进行接收,并将图像的数据进行打印。
资源推荐
资源详情
资源评论





























收起资源包目录


























共 19 条
- 1
资源评论

- 马克love2023-07-27对于那些想要利用Python处理图像但对QT不熟悉的人来说,这个文件提供了一个很好的入门指南。
- 艾法2023-07-27文件中的示例代码和步骤说明非常清晰,使得即使是初学者也能够轻松上手。
- zh2223332023-07-27这个文件提供了一个简便的方法来使用QT调用Python处理图像,帮助用户更高效地进行图像处理。
- 周林深2023-07-27通过学习这个文件,用户可以了解如何使用QT将Python的强大图像处理功能与更丰富的界面相结合。
- RandyRhoads2023-07-27这个文件给出了一些有用的技巧和建议,帮助用户避免一些常见的问题,更加顺利地完成图像处理任务。

是小峰呀
- 粉丝: 291
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 基于物联网技术的垃圾桶智能管理系统设计与实现.doc
- 全国自考C加加程序设计试题.doc
- 计算机教育中计算机科学技术的运用探讨.docx
- (源码)基于Arduino的ITS150遥控器模拟器.zip
- 电子商务教研计划.doc
- 江西省中小学安全知识网络答题活动答案解析.doc
- Web前端技术课程实训分析报告.doc
- 电子商务网站盈利能力的理性分析.doc
- 移动互联网环境下混合式教学设计与实践.docx
- 教育系统安全大检查市级督查巡查工作记录单.docx
- 计算机网络安全技术实验四.doc
- AVR单片机的通信系统设计方案.doc
- 略谈工程项目管理中材料成本控制的难点及对策.docx
- 个人网络信息安全防范.doc
- 基于大数据时代下档案管理工作存在的问题与对策研究.docx
- (源码)基于Arduino的MPU9250陀螺仪运动处理单元俯仰角控制项目.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈



安全验证
文档复制为VIP权益,开通VIP直接复制
