无法转换为&#39; cv :: Scalar_ <double>&#39;到&#39; cv :: Mat&#39; </double>

时间:2015-04-07 22:05:32

标签: c++

我试图在我的某个程序中复制Canny Edge detector示例,我遇到了这个问题。我相信这是一个普通的C ++问题,而不是openCV的特定问题(版本使用2.4.9)。

如果我尝试编译它,则失败并显示错误:

        cv::Mat dst = cv::Scalar::all(0);

错误:

Error   1   error C2440: 'initializing' : cannot convert from 'cv::Scalar_<double>' to 'cv::Mat'

但是,如果我尝试用这个编译它就可以了:

        cv::Mat dst;
        dst = cv::Scalar::all(0);

这是什么原因?

2 个答案:

答案 0 :(得分:1)

这是因为第一个语法

cv::Mat dst = cv::Scalar::all(0);

实际上正在调用构造函数并初始化(确切地说,它试图调用一个复制构造函数)。另一方面,这种语法

cv::Mat dst;
dst = cv::Scalar::all(0);

调用赋值运算符,perfectly defined when scalar is on the right side

答案 1 :(得分:1)

如果您想用零填充矩阵,您也可以考虑:

cv::Mat dst = Mat(1,1, CV_64F, cvScalar(0.));

OR

cv::Mat dst;
dst= Mat::zeros(1, 1, CV_64F);

希望有所帮助!