5

ここの新しい 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 を使用しています。

4

2 に答える 2

0

そのページはについて述べていませんIplImageCvMatどちらが違うかを教えてくれます。

cv2とにかく、新しい名前空間のラッパーを使用する方がよいでしょう。独自の画像コンテナの代わりに、ネイティブにnumpy配列を使用します。また、モジュール全体cvは非推奨と見なされ、最も近いメジャーリリースで完全に削除されます。

于 2012-10-28T10:07:09.910 に答える