ここの新しい OpenCV ドキュメントには、次のように IplImage を Numpy 配列に変換できると書かれています。
arr = numpy.asarray( im )
しかし、明らかに数学をサポートしていないため、それは私のニーズには合いません:
x = arr/0.01
TypeError: unsupported operand type(s) for /: 'cv2.cv.iplimage' and 'float'
データ型を指定しようとしても、そこまで到達できません。
arr = numpy.asarray( im, dtype=num.float32 )
TypeError: float() argument must be a string or a number
そのため、こちらの古いドキュメントで提供されているコードを使用しています。基本的に、これは次のことを行います。
arr = numpy.fromstring( im.tostring(), dtype=numpy.float32 )
しかしtostring
、おそらくデータをコピーしているため、呼び出しは本当に遅いですか? この変換を非常に高速にし、必要のないバッファーをコピーしないようにする必要があります。データが本質的に互換性がないとは思いません。最初に IplImage を作成していcv.fromarray
ます。これは非常に高速で、OpenCV 関数によって受け入れられます。
新しいasarray
メソッドを機能させる方法はありますか、またはそれを受け入れる方法で IplImage のデータ ポインターに直接アクセスできますnumpy.fromstring
か? Ubuntu Precise 用にパッケージ化された OpenCV 2.3.1 を使用しています。