道歉的长度......
我正在使用cython来包装一些用于图像处理的cpp代码。
返回处理后的32位ARGB模式的图像 - 即32位uint r = (buff[0] >> 16) & 0xFF; g = (buff[0] >> 8) & 0xFF; g = buff[0] & 0xFF
,我按照手册中的建议使用python对象将数据读入ndarray:{ {3}}使用以下类:
cdef class DataPointer:
cdef void* data_ptr
cdef int size
cdef set_data(self, int size, void* data_ptr):
self.size = size
self.data_ptr = data_ptr
def __array__(self):
return np.PyArray_SimpleNewFromData(2, [self.size,4], np.NPY_UINT8, self.data_ptr)
以及以下电话:
cdef np.ndarray image
data = DataPointer()
data.set_data(height*width, <void*>im_buff)
image = np.array(data, copy=False)
image.base = <PyObject*> data
Py_INCREF(data)
这给了我一个数组,其中每一行都是单独的ARGB值,因此形状为(height*width, 4)
。它们看起来像这样:
[ 67 115 138 1]
这些值对应于B G R A。
现在如果我继续做
original = np.delete(image, 3, 1).reshape((height, width, 3)
cv2.imshow('out', original)
它工作正常,但RGB值反转为BGR,因此图像看起来很有趣。
然而,当我尝试翻转这样的值时:
original = np.fliplr(np.delete(image, 3, 1)).reshape((height, width, 3))
print original [0, :3]
cv2.imshow('out', original)
我打印了以下正确的RGB值,但来自cv2.imshow()
的错误消息[[138 115 67]
[138 114 68]
[136 110 64]]
OpenCV Error: Bad flag (parameter or structure field) (Unrecognized or unsupported array type) in cvGetMat, file /Users/Tom/Desktop/OpenCV-2.4.0/modules/core/src/array.cpp, line 2482
知道为什么吗?
答案 0 :(得分:1)