Ask Your Question

Revision history [back]

click to hide/show revision 1
initial version

Multiplication between Mat and Scalar

For a given mask image (binary cv::Mat M), I'd like to color (cv::Scalar C) the white pixels of M. In general, I think this problem is an element-wise multiplication between cv::Mat and cv::Scalar, like:

M2 = M*C

where I am expecting:

[0 1 0 ...]                     [Scalar(0,0,0) Scalar(b,g,r) Scalar(0,0,0) ...]
[0 1 1 ...]  * Scalar(b,g,r) =  [Scalar(0,0,0) Scalar(b,g,r) Scalar(b,g,r) ...]
[0 0 0 ...]                     [Scalar(0,0,0) Scalar(0,0,0) Scalar(0,0,0) ...]

but actually there is no definition of operator* between cv::Mat and cv::Scalar. What is a good alternative?

Computing an image for each channel (i.e. M*b, M*g, M*r) and then compose a single image by cv::merge would be a solution, but I feel it might not be computationally efficient. (or is this a best way?)