2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Boost pythonでndarrayをC++の配列に変換する

Posted at

(メモ書きです。環境等追記する予定です。)
C++で書いた関数(C++)をPythonから呼ぶため、Boot pythonを使いました。
PythonでOpenCVを使うプログラムとマージしようと思ったのでした。
Boost PythonでOpenCVのcv::Matなどの構造体を扱うのが難しそうなので、
こちらを参考にさせていただいたのですが私には無理だった・・)
ひとまずPython側のプログラムでキャプチャした画像をndarrayに保存し、
C++の配列に変換するプログラムを書いてみました。

#参考にしたページは以下です!
http://bluewidz.blogspot.com/2018/05/pythonnumpy.html

プログラムは以下です。

#include <boost/python/numpy.hpp>
namespace p = boost::python;
namespace np = boost::python::numpy;
                                                                                                                                                                                                         
void plus_scalar(np::ndarray &a, float b)
{
  auto N = a.shape(0);
  auto M = a.shape(1);
  auto *p = reinterpret_cast<float*>(a.get_data());
  float array[(int)N];
  int i;
  for(i=0;i<N*M;i++){
    array[i]=*p;
    p++;
 
  }
  for(i=0;i<N*M;i++){
    printf("print%d,%f\n",i,array[i]);
  }
}

#####コンパイル

g++ --std=c++14 --shared -fPIC -I$BOOST_PATH/include/ -I/usr/include/python2.7/ test1.cpp -L$BOOST_PATH/lib -lboost_numpy -lboost_python -o test.so

#####できた関数を呼び出すPythonのプログラムです

import sys
sys.path.append('.')
import test1
import numpy as np

a = np.array([[1,2,3],[2,3,4]], dtype=np.float32)
print(a)
b = test1.plus_scalar(a, 3.0)
2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?