如何将cv::Scalar分配给cv::Mat?

How to assigne a cv::Scalar to cv::Mat?

使用OpenCV中实现的class Scalar,没看懂这段代码有什么区别:

Mat test;
test = Scalar::all(0);

还有这个:

Mat test = Scalar::all(0);
         ^

我的问题是为什么第一个赋值正确而第二个赋值不正确?

Vec<_Tp,n>为参数的Mat构造函数的声明是

  template<typename _Tp, int n>
  explicit Mat(const Vec<_Tp, n>& vec, bool copyData=true);

cv::Scalar 被视为 Vec<_Tp,4> 因此您可以将 Scalarexplicit 方式传递给 Mat 构造函数 Class obj(parameter); 不是 Class obj = parameter; 所以调用

Mat test(Scalar::all(0));