您的位置:首页 > 编程语言 > C语言/C++

c++ 调用python传输图片实例

2019-12-13 12:12 1861 查看

如下所示:

#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

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

[p]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传输图片实例就是小编分享给大家的全部内容了,希望能给大家一个参考

您可能感兴趣的文章:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c++ python 传输图片