How to Multiply cv::Mat with mask
I'd like multiply two arrays(cv::Mat) with mask for speed up application.
In add and subtraction exists
mask - optional operation mask - 8-bit single channel array, that specifies elements of the output array to be changed
Provide OpenCV similar functionality for multiplication and divide?
I can solve it for full image and then copy data to output. But this is slow down.
cv::Mat input1(size, CV_8U|CV_16S|CV_32F);
cv::Mat input2(size, CV_8U|CV_16S|CV_32F); // or cv::Scalar
cv::Mat mask(size, CV_8U);
cv::Mat output(size, CV_8U|CV_16S|CV_32F);
// per pixel multiplication input1 and input2
cv::multiply(input1, input2, output);
//cv::multiply(input1, input2, output, mask);
way around for same result:
cv::Mat multiplyFull;
cv::multiply(input1, input2, multiplyFull);
// clear data in output
output.setTo(cv::Scalar::all(0), mask);
// set in output only multiplication given by mask
cv::add(output, multiplyFull, output, mask);
I don't think it's possible without copying images.
IMHO would be nice if you ask your question like : here is my code to do ...... is there anyway to speed up my code. then maybe i learned something from your code
Hi did you solve this problem, I have the same question about multiplying mat using mask. Thanks!
you must write your own code