Opencv乘以标量和矩阵

Arp*_*hah 14 scalar opencv matrix multiplication scale

我一直在努力实现一些非常微不足道的东西,而且在Matlab中是微不足道的.

我想简单地实现以下目标:

cv::Mat sample = [4 5 6; 4 2 5; 1 4 2];
sample = 5*sample;
Run Code Online (Sandbox Code Playgroud)

之后的样本应该是:

[20 24 30; 20 10 25; 5 20 10]
Run Code Online (Sandbox Code Playgroud)

我曾尝试scaleAdd,Mul,Multiply和既不允许标量乘法器及所需要的相同的"尺寸和类型"的矩阵.在这种情况下,我可以创建一个矩阵,然后使用scale参数,但这看起来非常无关紧要

任何直接简单的方法都会很棒!

Aur*_*ius 19

事实上,OpenCV支持乘以标量值乘以重载operator*.但是,您可能需要正确初始化矩阵.

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
Run Code Online (Sandbox Code Playgroud)

如果您主要对数学运算感兴趣,那么使用起来会cv::Matx更容易一些:

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

  • 此功能仅适用于单通道图像.因此,这通常不起作用.你必须首先拆分所有通道,然后重新组合,例如//(3)拆分RGB图像矢量<Mat> imgPlanes(3); split(matImage,imgPlanes); Mat matImageK = imgPlanes [0]; (4认同)

J.E*_*zyk 5

对于 java 来说,没有运算符重载,但 Mat 对象通过 ConvertTo 方法提供了功能。

Mat dst= new Mat(src.rows(),src.cols(),src.type());
src.convertTo(dst,-1,scale,offset);
Run Code Online (Sandbox Code Playgroud)

有关此方法的文档在这里