3

一部のnumpy配列がcv.fromarray()を使用してcvMatに変換されないという問題があります。numpy配列が転置されるたびに問題が発生するようです。

import numpy as np
import cv

# This works fine:
b = np.arange(6).reshape(2,3).astype('float32')
B = cv.fromarray(b)
print(cv.GetSize(B))

# But this produces an error:
a = np.arange(6).reshape(3,2).astype('float32')
b = a.T
B = cv.fromarray(b)
print(cv.GetSize(B))

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "test_err.py", line 17, in <module>
    B = cv.fromarray(b)
TypeError: cv.fromarray array can only accept arrays with contiguous data

助言がありますか?私の配列の多くはある時点で転置されているため、エラーが頻繁に発生します。

MacPortsからインストールされたNumPy1.6.2とOpenCV2.4.2.1を搭載したMacOSXLionでPython2.7を使用しています。

4

1 に答える 1

7

属性を使用して配列を確認できます。flags.contiguousそうでない場合は、次を使用するようにしますcopy()

>>> a = np.arange(16).reshape(4,4)
>>> a.flags.contiguous
True
>>> b = a.T
>>> b.flags.contiguous
False
>>> b = b.copy()
>>> b.flags.contiguous
True

転置を要求する場合、numpyは実際にはデータを転置せず、特に。を使用してコピーをトリガーしない限り、データへのアクセスに使用されるストライドのみを転置しますcopy()

于 2013-02-05T19:20:36.403 に答える