如何使用 opencv 库将 3D 矩阵的元素归零?

Posted

技术标签:

【中文标题】如何使用 opencv 库将 3D 矩阵的元素归零?【英文标题】:How to zero elements of 3D Matrix with opencv Library? 【发布时间】:2013-10-03 20:22:07 【问题描述】:

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

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】:

我提醒你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 的立方体。

【讨论】:

这很酷。标量是超级好工具。感谢您的回答。 是的,他们真的很棒;)

以上是关于如何使用 opencv 库将 3D 矩阵的元素归零?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用opencv C ++将3D矩阵划分为2D矩阵束

162. 矩阵归零

162. 矩阵归零

opencv中reprojectImageTo3D函数的Q矩阵

如何在 OpenCV 中访问高维矩阵的元素?

如何使用带有c ++的opencv库将下图中的黑色像素更改为红色像素