c++ 调用python传输图片实例
如下所示:
#include#include #include"opencv2/imgcodecs.hpp" #include"opencv2/imgproc.hpp" #include"opencv2/videoio.hpp" #include #include #include"opencv2/video/background_segm.hpp" //usingnamespacestd; intinit_numpy(){ import_array(); }
初始化:
Py_SetPythonHome(L"D:\\Users\\Lenovo\\Anaconda3\\envs\\python35"); Py_Initialize(); init_numpy(); PyRun_SimpleString("importsys"); PyRun_SimpleString("sys.path.append('./')"); pModule=NULL; pFunc=NULL; pModule=PyImport_ImportModule("demo"); pFunc=PyObject_GetAttrString(pModule,"load_model"); PyEval_CallObject(pFunc,NULL);
传输代码:
cv::Matimg=cv::imread("d:\\1.jpg",CV_LOAD_IMAGE_COLOR); intm,n; n=img.cols*3; m=img.rows; unsignedchar*data=(unsignedchar*)malloc(sizeof(unsignedchar)*m*n); intp=0; for(inti=0;i(i,j); p++; } } npy_intpDims[2]={m,n};//给定维度信息 PyObject*PyArray=PyArray_SimpleNewFromData(2,Dims,NPY_UBYTE,data); PyObject*ArgArray=PyTuple_New(1); PyTuple_SetItem(ArgArray,0,PyArray); PyObject*pDict=nullptr; pDict=PyModule_GetDict(pModule); PyObject*pFuncFive=PyDict_GetItemString(pDict,"load_image"); //PyObject_CallObject(pFuncFive,ArgArray); PyObject*pReturn=PyObject_CallObject(pFuncFive,ArgArray); intresult; PyArg_Parse(pReturn,"i",&result); CStringstrtemp; strtemp.Format(_T("%d"),result); MessageBox(strtemp);
Python部分:
importcv2 importnumpyasnp w=227 h=227 c=3 sess=None defarrayreset(array): #foriinrange(array.shape[1]/3): #pass a=array[:,0:len(array[0]-2):3] b=array[:,1:len(array[0]-2):3] c=array[:,2:len(array[0]-2):3] a=a[:,:,None] b=b[:,:,None] c=c[:,:,None] m=np.concatenate((a,b,c),axis=2) returnm defload_model(): globalsess sess=tf.Session() saver=tf.train.import_meta_graph('./model/model.ckpt.meta') saver.restore(sess,tf.train.latest_checkpoint('./model/')) defload_image(image): img=arrayreset(image)
其实还可以用imencode来解决:本文尚未完善
Matimage=imread("d:\\11.jpeg",CV_LOAD_IMAGE_COLOR); IplImageiplimage=image; vectorbuff;//bufferforcoding vector param=vector (2); param[0]=CV_IMWRITE_JPEG_QUALITY; param[1]=95;//default(95)0-100 imencode(".jpg",image,buff,param); std::stringstr_encode(buff.begin(),buff.end());
以上这篇c++调用python传输图片实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。