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

有什么建议么?我的许多数组都在某个时候被转置了,所以错误经常出现。

我在 MacOS X Lion 上使用 Python2.7,并从 MacPorts 安装了 NumPy 1.6.2 和 OpenCV 2.4.2.1。

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 回答