Как замаскировать поплавок в opencv

У меня есть мат A типа CV_32F и маска M с двоичным значением 0 и 255. Например,

A = [0.1 0.2; 0.3 0.4]  
M = [1   0  ; 0   0  ]

Я хочу получить результат A&B = [0.1, 0;0 0] Пока побитовая операция не работает с плавающей запятой. И я попытался преобразовать маску в CV_32F, а затем маску, как показано ниже, также не работает.

M.convertTo(M, CV_32F);
A.copyTo(A, M);

Итак, как это сделать?


person Frazer    schedule 03.04.2015    source источник
comment
Зачем нужно конвертировать маску в CV_32F?   -  person herohuyongtao    schedule 03.04.2015
comment
конвертировать или нет, не работает   -  person Frazer    schedule 04.04.2015
comment
Пожалуйста, предоставьте свой код и объясните, почему он не работает.   -  person herohuyongtao    schedule 04.04.2015


Ответы (2)


Ваш код не работает, потому что, как указано в документе Mat::copyTo говорит, что функция не обрабатывает случай частичного перекрытия между исходной и целевой матрицами, хотя в вашем случае исходная и целевая матрицы совпадают .

Вы должны сохранить результат в другом месте, например

cv::Mat dst;
A.copyTo(dst, M);  // dst is what you want
person herohuyongtao    schedule 07.04.2015

Я думаю, это может помочь:

//to create mask
cv :: Mat floatMask
cv::threshold( someimage , floatMask , 0 , 1 , cv ::THRESH_BINARY );
floatMask.convertTo( floatMask , cv :: CV_32F);

// now to mask image 
floatImageToBeMasked = floatImageToBeMasked.mul ( floatMask ) ;
person Gagesh Madaan    schedule 28.05.2018