如何在OpenCV的Python接口中将列表对象赋值给cvmat?

1 投票
1 回答
2235 浏览
提问于 2025-04-16 16:10

我想用cv.SetData()来填充一个cvMat对象,使用的是OpenCV 2.1的Python接口。在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 个回答

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

撰写回答