2015-04-07 2 views
1

Я пытаюсь воспроизвести образец Canny Edge detector в одной из моих программ, и я столкнулся с этой проблемой. Я считаю, что это общий вопрос на C++, а не специальный для openCV (версия 2.4.9).не может конвертировать из 'cv :: Scalar_ <double>' to 'cv :: Mat'

Если я пытаюсь скомпилировать это он терпит неудачу с ошибкой:

 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); 

В чем причина этого?

ответ

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

Если вы хотите, чтобы заполнить матрицу с нулями вы можете также рассмотреть:

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

ИЛИ

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

Надежда, что помогает!

Смежные вопросы