Opencv multiply scalar and matrix

北城余情 提交于 2019-12-04 01:34:57

OpenCV does in fact support multiplication by a scalar value with overloaded operator*. You might need to initialize the matrix correctly, though.

float data[] = {1 ,2, 3,
                4, 5, 6,
                7, 8, 9};
cv::Mat m(3, 3, CV_32FC1, data);
m = 3*m;  // This works just fine

If you are mainly interested in mathematical operations, cv::Matx is a little easier to work with:

cv::Matx33f mx(1,2,3,
               4,5,6,
               7,8,9);
mx *= 4;  // This works too

For big Mats you should use forEach.

If C++11 is available:

m.forEach<double>([&](double& element, const int position[]) -> void
{
element *= 5;
}
);

something like this.

Mat m = (Mat_<float>(3, 3)<<
                    1, 2, 3,
                    4, 5, 6,
                    7, 8, 9)*5;

For java there is no operator overloading, but the Mat object provides the functionality with a convertTo method.

Mat dst= new Mat(src.rows(),src.cols(),src.type());
src.convertTo(dst,-1,scale,offset);

Doc on this method is here

Syed Safdar Ali
Mat A = //data;//source Matrix
Mat B;//destination Matrix
Scalar alpha = new Scalar(5)//factor
Core.multiply(A,alpha,b);
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!