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());


发布了2644 篇原创文章 · 获赞 962 · 访问量 522万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 技术黑板 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览