如何在OpenCV中使用python接口将列表对象分配给cvmat?

时间:2011-04-21 12:49:57

标签: python opencv

我想使用 cv.SetData()在OpenCV 2.1 中使用 python接口填充cvMat对象。 在C中,可以使用下面的代码完成。

double a[] = {1,2,3,4,5,6,7,8,9,10,11,12};
cvMat Ma;
cvInitMatHeader(&Ma,3,4,CV_64FC1,a,CV_AUTOSTEP);

但是在python界面中,没有 InitMatHeader 函数,所以我尝试这样编码:

a = range(1,13)
Ma = cv.CreateMatHeader(3,4,cv.CV_64FC1)
cv.SetData(Ma,a,cv.CV_AUTOSTEP)
PrintMat(Ma) # my own function to display all elements in a mat

然后我得到了一个 TypeError:CvMat参数'src'没有数据。似乎变量 Ma 尚未初始化,那么如何使用numpy完成此操作?

1 个答案:

答案 0 :(得分:4)

尝试传递array.array('d', vals)numpy.array(vals, numpy.float64)

import array
import cv
import numpy

ar = array.array('d', range(1, 13))
na = numpy.array(range(1, 13), numpy.float64)
for vals in (ar, na):
    m = cv.CreateMatHeader(3, 4, cv.CV_64FC1)
    cv.SetData(m, vals, cv.CV_AUTOSTEP)
    print cv.mGet(m, 0, 2)

输出:

3.0
3.0