c++ 调用python传输图片实例分享!

如下所示:

  #include <Python.h>    #include <arrayobject.h>         #include "opencv2/imgcodecs.hpp"    #include "opencv2/imgproc.hpp"    #include "opencv2/videoio.hpp"    #include <opencv2/highgui.hpp>    #include <opencv2/video.hpp>    #include "opencv2/video/background_segm.hpp"    //using namespace std;    int init_numpy() {     import_array();    }  

初始化:

   Py_SetPythonHome(L"D:\Users\Lenovo\Anaconda3\envs\python35");     Py_Initialize();     init_numpy();     PyRun_SimpleString("import sys");     PyRun_SimpleString("sys.path.append('./')");     pModule = NULL;     pFunc = NULL;     pModule =PyImport_ImportModule("demo");     pFunc =PyObject_GetAttrString(pModule, "load_model");     PyEval_CallObject(pFunc,NULL);  

传输代码:

   cv::Mat img =cv::imread("d:\1.jpg", CV_LOAD_IMAGE_COLOR);     int m, n;     n = img.cols *3;     m = img.rows;     unsigned char *data = (unsigned char*)malloc(sizeof(unsignedchar) * m * n);     int p = 0;     for (int i = 0; i < m;i++)     {      for (int j = 0; j < n; j++)      {       data[p]= img.at<unsignedchar>(i, j);       p++;      }     }     npy_intp Dims[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);     int result;     PyArg_Parse(pReturn,"i", &result);     CString strtemp;     strtemp.Format(_T("%d"), result);     MessageBox(strtemp);  

Python部分:

  importcv2  import numpyas np    w=227  h=227  c=3  sess = None  def arrayreset(array):   # for i inrange(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)   return m  def load_model():   global sess   sess = tf.Session()   saver = tf.train.import_meta_graph( './model/model.ckpt.meta')   saver.restore( sess, tf.train.latest_checkpoint('./model/') )    def load_image(image):   img = arrayreset(image)  

其实还可以用imencode来解决:本文尚未完善

  Mat image = imread("d:\11.jpeg", CV_LOAD_IMAGE_COLOR);      IplImage iplimage = image;      vector<uchar> buff;//buffer for coding       vector<int> param = vector<int>(2);      param[0] = CV_IMWRITE_JPEG_QUALITY;      param[1] = 95;//default(95) 0-100     imencode(".jpg", image, buff, param);  std::string str_encode(buff.begin(), buff.end());  

以上这篇c++ 调用python传输图片实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持<计算机技术网(www.ctvol.com)!!>。

—-想了解c++ 调用python传输图片实例分享!全部内容且更多的C语言教程关注<计算机技术网(www.ctvol.com)!!>

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/c-cdevelopment/483462.html

(0)
上一篇 2020年11月10日
下一篇 2020年11月10日

精彩推荐