Операция маскирования матрицы в OpenCV (C ++) и в Matlab

Я хотел бы сделать следующую операцию (которая находится в текущем состоянии в Matlab), используя переменные cv :: Mat.

У меня есть матричная маска:

mask =

1     0     0
1     0     1

тогда матрица М:

M =

1
2
3
4
5
6
3

и образцы = M (маска, 🙂

samples =

1
2
6

У меня вопрос, как я могу выполнить такую ​​же операцию, как, M (маска, :), с OpenCV?

0

Решение

С моим знанием функция шкафа к этой вещи copyTo функция в opencv что получить matrix а также mask для входов. но эта функция содержит оригинальную структуру вашей матрицы, которую вы можете проверить.

Я думаю, что нет проблем в использовании for цикл в 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]

с использованием copyTo ваш вывод будет как ниже

[1 0 0
4 0 6];

введите описание изображения здесь

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]