OpenCV(C ++)和Matlab中的矩阵屏蔽操作

时间:2017-08-15 10:38:10

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

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

我有矩阵掩码:

mask =

 1     0     0
 1     0     1

然后矩阵M:

M =

 1
 2
 3
 4
 5
 6
 3

和samples = M(掩码,:)

samples =

 1
 2
 6

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

1 个答案:

答案 0 :(得分:1)

据我所知,copyTo opencv函数的壁橱函数是matrix函数,它为输入提供maskfor。但是这个函数保存了矩阵的原始结构,你可以测试它。

我认为在opencv(在c ++中)使用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]

以上代码结果低于输出。

[1 0 0
 4 0 6];

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

try {
   module.exports = exports = MyModule;
} catch (e) {}

enter image description here