我试图在我的某个程序中复制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);
这是什么原因?
答案 0 :(得分:1)
这是因为第一个语法
cv::Mat dst = cv::Scalar::all(0);
实际上正在调用构造函数并初始化(确切地说,它试图调用一个复制构造函数)。另一方面,这种语法
cv::Mat dst;
dst = cv::Scalar::all(0);
答案 1 :(得分:1)
如果您想用零填充矩阵,您也可以考虑:
cv::Mat dst = Mat(1,1, CV_64F, cvScalar(0.));
OR
cv::Mat dst;
dst= Mat::zeros(1, 1, CV_64F);
希望有所帮助!