(メモ書きです。環境等追記する予定です。)
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)