Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork56.4k
Open
Description
OpenCV 3.4.9 / 4.2.0:
arg1 - uint8 matrix with 3 channels:
Mat m__1_2_3(Size(2, 2), CV_8UC3, Scalar(1, 2, 3));
arg2:
5Scalar(5)(identical toScalar(5, 0, 0, 0))Scalar(5, 1e-6, 0)Scalar::all(5)(identical toScalar(5, 5, 5, 5))
Result variants:
[6, 2, 3]- modified 1st channel only[6, 7, 8]- all channels are modified
| # | C++ code | arg1 5 | arg2 Scalar(5) | arg3 Scalar (5, 1e-6, 0) | arg4 Scalar::all(5) |
|---|---|---|---|---|---|
| 1 | cv::add(arg1, arg2, res) | 2 | 1 | 1 | 2 |
| 2 | MatExprres = arg1 + arg2 | 1 #14738 | 1 | 1 | 2 |
| 3 | MatExprres = 1.001 * arg1 + arg2 | 2 #14738 | 2 #16538 | 1 | 2 |
Analyse:
- results with
Scalar(5, 1e-6, 0)(arg3) andScalar::all(5)(arg4) are consistent and adequate - some other cases should be be deprecated / changed / removed?
- case with numeric scalar (
5) may have designed to use withcomplex numbers (emulation through matrices with 2 channels) where5is interpreted as a real number. - current implicit conversion of
5intoScalar(no explicit bug/feature) converts this intoScalar(5, 0, 0, 0). Extra overloads may help to avoid implicit conversions (but may break user code).
Related unclear stuff:
- multi-channel
Mat::eye()without element initializer. - missing
explicitforVecandScalarconstructors:cv::Matx33f tmp = true compiles #11956 - almost zero tests for
MatExprstuff