如何使用opencv Library将3D Matrix元素归零?

时间:2013-10-03 20:22:07

标签: c++ opencv matrix

我正在努力使用opencv将3D矩阵的元素归零。 我可以按照以下方式将2D矩阵中的所有元素归零:

meta = new Mat(Mat::zeros(cluster,3,CV_32S));

我尝试使用类似的方法在3D矩阵中用0初始化元素,但它失败了。

block = new Mat(Mat::zeros(3,dim,CV_32F));

错误讯息:

1>MatrixOp.obj : error LNK2019: unresolved external symbol "public: static class cv::MatExpr __cdecl cv::Mat::zeros(int,int const *,int)" (?zeros@Mat@cv@@SA?AVMatExpr@2@HPBHH@Z) referenced in function "public: __thiscall MatrixOp::MatrixOp(char *)" (??0MatrixOp@@QAE@PAD@Z)

我有最后一种初始化矩阵的方法。遍历矩阵并设置元素值0.但它看起来很省力。

for(int i=0;i<value_num;i++)
    for(int j=0;j<frame_no;j++)
        for(int k=0;k<cluster;k++)
            block->at<float>(i,j,k) = 0;

有人能给我一个更好的想法吗? 谢谢。

1 个答案:

答案 0 :(得分:6)

我提醒你documentation,你可以使用这个构造函数:

C++: Mat::Mat(int ndims, const int* sizes, int type, const Scalar& s)

传递cv :: Scalar(0)应该对你的目的有好处。

int sizes[] = { 100, 100, 100 };
cv::Mat *matrix = new cv::Mat(3, sizes, CV_32FC1, cv::Scalar(0));

这应该是一个3D矩阵,一种边缘为100的立方体。