【问题标题】:Matrix masking operation in OpenCV(C++) and in MatlabOpenCV(C++) 和 Matlab 中的矩阵屏蔽操作
【发布时间】:2018-01-23 06:39:24
【问题描述】:

我想使用 cv::Mat 变量进行以下操作(在 Matlab 中处于当前状态)。

我有矩阵掩码:

mask =

 1     0     0
 1     0     1

然后矩阵M:

M =

 1
 2
 3
 4
 5
 6
 3

and samples = M(mask,:)

samples =

 1
 2
 6

我的问题是,如何使用 OpenCV 执行 M(mask,:) 之类的相同操作?

【问题讨论】:

  • 我猜maskM 是矩阵但是samples 的类型是什么?
  • @Gabriel Devillers 也将是矩阵 (cv::Mat)。上面给出的示例只是给出了随机数和大小,但对于实际任务保持相同的含义。

标签: c++ matlab opencv matrix image-masking


【解决方案1】:

据我所知,这个东西的壁橱函数是opencv 中的copyTo 函数,它得到matrixmask 的输入。但是这个函数保存了你的矩阵的原始结构,你可以测试它。

我认为在 opencv(in c++) 中使用 for 循环没有问题,因为它很快。我建议在下面的代码中使用for 循环。

Mat M=(Mat_<uchar>(2,3)<<1,2,3,4,5,6); //Create M
cout<<M<<endl;

Mat mask=(Mat_<bool>(2,3)<<1,0,0,1,0,1); // Create mask
cout<<mask<<endl;

Mat samples;
///////////////////////////////
for(int i=0;i<M.total();i++)
{
    if(mask.at<uchar>(i))
        samples.push_back(M.at<uchar>(i));
}
cout<<samples<<endl;

上面的代码结果低于输出。

[  1,   2,   3;
   4,   5,   6]

[  1,   0,   0;
   1,   0,   1]

[  1;
   4;
   6]

使用 copyTo 您的输出将如下所示

[1 0 0
 4 0 6];

【讨论】:

    猜你喜欢
    • 2016-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-22
    • 2016-12-21
    • 2016-03-28
    • 2023-03-23
    • 1970-01-01
    相关资源
    最近更新 更多