Как указано в комментариях и в ответе @ Антонио, вы не можете добавить 0,1 к целому числу.
Если вы используете матрицы CV_8UC1, но вы хотите работать со значениями с плавающей точкой, вы должны умножить на 255.
Mat1b A; // <-- type CV_8UC1
...
A += 0.1 * 255;
Если результат операции должен быть отлит, так как в этом случае, то в конечном итоге вызывается saturated_cast
.
Это эквивалентно ответу Антонио, но в результате получается более чистый код (по крайней мере, для меня). Тот же код будет использоваться, если вы суммируете double
или Scalar
. Scalar
объект будет создан в обоих направлениях с помощью:
template<typename _Tp> inline
Scalar_<_Tp>::Scalar_(_Tp v0)
{
this->val[0] = v0;
this->val[1] = this->val[2] = this->val[3] = 0;
}
Однако, если вам нужно суммировать точно 0,1 до вашей матрицы (и не растягивать его на 255), необходимо преобразовать матрицу CV_32FC1:
#include <opencv2/opencv.hpp>
using namespace cv;
int main(int, char** argv)
{
Mat1b A = (Mat1b(3,3) << 1,2,3,4,5,6,7,8,9);
Mat1f F;
A.convertTo(F, CV_32FC1);
F += 0.1;
return 0;
}
Я не знаю, какой тип raw_t_real (google не говорит мне) ... Вы пробовали: http://docs.opencv.org/modules/core/doc/operations_on_arrays.html#add? Возможно, перегруженный оператор «+» не определен для всех типов. –
от raw_t_ubit8 Я имею в виду, что Mat A создается A.create (sizes_height, sizes_width, CV_8UC1), и да, я тоже пробовал добавить, дает тот же результат. –
Если вы создали его с помощью CV_8UC1, он не может содержать значения, которые вы упомянули. – Antonio