Numpy との連携¶
ここでは PyFIE と NumPy の連携機能について紹介しています。 これらの機能は NumPy を使用することが可能な環境でのみ有効となります。
なお、 ここで示されるサンプルコードでは、 下記のように NumPy のインポートが行われているものとします。
import numpy as np
まず PyFIE の画像オブジェクト(FHANDLE
)の 属性 ndarray
は、
その画像メモリを共有する numpy.ndarray
となります。
これを介して画像メモリに対するアクセスを行うことが可能となります。
- C 言語
FHANDLE img = fnFIE_img_root_alloc(F_IMG_UC8, 1, 1024, 1024); // 全画素の値を 0 クリア. fnFIE_img_clear(img, 0); // 水平垂直方向 2 画素おきに画素値を設定. { UCHAR * adrs = fnFIE_img_get_adrs(img); INT_PTR step = fnFIE_img_get_step(img); INT x, y; for(y = 0; y < 1024; y += 2){ UCHAR * p = adrs + y * step; for(x = 0; x < 1024; x += 2){ p[x] = 255; } } } fnFIE_free_object(img);
- Python
img = pyfie.fnFIE_img_root_alloc(pyfieF_IMG_UC8, 1, 1024, 1024) # 全画素の値を 0 クリア. img.ndarray[:] = 0 # 水平垂直方向 2 画素おきに画素値を設定. img.ndarray[::2, ::2] = 255 # (上記は画像オブジェクト img の画像メモリに対して # 直接処理を行っていることになります)
下記は属性 ndarray
を使用して PyFIE の画像オブジェクトに対して
NumPy が提供する関数を使用する例です。
- Python
# 入力画像を PyFIE 画像オブジェクトとして用意 src = pyfie.FHANDLE() pyfie.fnFIE_img_load_bmp("filename.bmp", src, pyfie.F_COLOR_IMG_TYPE_UC8) # Numpy による FFT 変換. fft = np.fft.fft2(src.ndarray)
- Python
# 入出力画像を PyFIE 画像オブジェクトとして用意 src = pyfie.FHANDLE() pyfie.fnFIE_img_load_bmp("filename.bmp", src, pyfie.F_COLOR_IMG_TYPE_UC8) dst = src.empty_like(pyfie.F_IMG_DOUBLE) # Numpy による水平方向積分画像の作成 np.cumsum(src.ndarray, out=dst.ndarray, axis=1)
また PyFIE 関数の引数において画像オブジェクトを要求するものに対しては、
numpy.ndarray
を直接渡すことができます。
- Python
# 入力画像を Numpy の ndarray として用意 src = np.random.normal(loc=128, scale=3.5, size=(480, 512)) # PyFIE 関数による平均値計算 ave = pyfie.DOUBLE() pyfie.fnFIE_img_calc_average(src, ave)
- Python
# 入力画像を PyFIE 画像オブジェクトとして用意 src = pyfie.FHANDLE() pyfie.fnFIE_img_load_bmp("filename.bmp", src, pyfie.F_COLOR_IMG_TYPE_UC8) # 出力画像を Numpy の ndarray として用意 dst = np.ndarray( shape=(src.height, src.width), dtype=src.dtype ) # PyFIE 関数による平滑化 pyfie.fnFIE_average(src, dst, pyfie.F_BORDER_NONE, 0)
この他、 PyFIE 画像オブジェクトと numpy.ndarray
間相互でのオブジェクト複製や、
PyFIE 算術型ポインタと numpy.ndarray
の連携等が機能として用意されています。
詳細については "詳細 >> 拡張機能 >> NumPy との連携 " を参照ください。