我需要对一个矩阵中的所有元素求和,我用了函数
sum(sum(A));
在matlab中。其中A是一个大小为300*360的矩阵。我想在OpenCV中实现相同的函数。我使用了这样的东西。
A
double s=cv::sum(cv::sum(A));
但是有一个错误显示无法将标量转换为双精度。如何解决这个问题?
kkih6yb81#
与Matlab不同,在opencv中,cv::sum(A)沿着所有维度求和,并返回一个等于Matlab的sum(sum(A))的单个数字(标量)。所以你需要的是
cv::sum(A)
sum(sum(A))
double s = cv::sum(A)[0];
sqxo8psd2#
此外,您可以使用@Shai;
double sum = cv::sum(A).val(0);
umuewwlo3#
Scalar cv::sum(InputArray src)返回一个Scalar,其中每个通道都被单独求和(输入图像必须有1到4个通道)。如果我们正在寻找的是所有通道上所有值的总和,则需要进一步对返回的Scalar的所有元素求和。一个线性解决方案可以使用dot乘积,其中标量填充1:
Scalar cv::sum(InputArray src)
Scalar
dot
cv::sum(A).dot(cv::Scalar::ones());
3条答案
按热度按时间kkih6yb81#
与Matlab不同,在opencv中,
cv::sum(A)
沿着所有维度求和,并返回一个等于Matlab的sum(sum(A))
的单个数字(标量)。所以你需要的是
sqxo8psd2#
此外,您可以使用@Shai;
umuewwlo3#
Scalar cv::sum(InputArray src)
返回一个Scalar
,其中每个通道都被单独求和(输入图像必须有1到4个通道)。如果我们正在寻找的是所有通道上所有值的总和,则需要进一步对返回的Scalar
的所有元素求和。一个线性解决方案可以使用dot
乘积,其中标量填充1: