C++ OpenCV中矩阵中的元素之和?
我需要求矩阵中所有元素的和。我使用了这个函数C++ OpenCV中矩阵中的元素之和?,c++,matlab,opencv,image-processing,computer-vision,C++,Matlab,Opencv,Image Processing,Computer Vision,我需要求矩阵中所有元素的和。我使用了这个函数 sum(sum(A)); 在matlab中。其中A是大小为300*360的矩阵。 我想在OpenCV中实现相同的函数。我用过这样的东西 double s=cv::sum(cv::sum(A)); 但显示无法将标量转换为双精度时出错。如何解决此问题?与Matlab不同,在opencv中,cv::sum(A)沿所有维度求和,并返回一个与Matlab的sum(A)相等的单个数字(标量) 所以,你需要的是 double s = cv::sum(
sum(sum(A));
在matlab中。其中A
是大小为300*360的矩阵。
我想在OpenCV中实现相同的函数。我用过这样的东西
double s=cv::sum(cv::sum(A));
但显示无法将标量转换为双精度时出错。如何解决此问题?与Matlab不同,在opencv中,
cv::sum(A)
沿所有维度求和,并返回一个与Matlab的sum(A)相等的单个数字(标量)
所以,你需要的是
double s = cv::sum( A )[0];
除此之外你还可以使用
double sum = cv::sum(A).val(0);
另一方面,在Matlab中,最好是
sum(A(:)
而不是sum(A))
不完全正确的可能重复:cv::Scalar s=cv::sum(A)代码>如果这是一张1寸的垫子,它是:双psum=cv::sum(a)[0]
0代表什么。有人能解释一下吗?cv::sum
返回一个cv::Scalar
元素。例如,如果有3通道图像,则返回值有3个元素,每个通道一个元素。因此,每个通道都是独立汇总的<代码>[0]
将访问该标量的第一个值。对于具有BGR排序的RGB图像(如OpenCV中常用的),标量的[0]
将访问汇总的“蓝色通道”,在该示例中,“[1]”将是“绿色通道”的和,“[2]”是“红色通道”的和。我可以将Mat
对象传递给这个函数吗?这样做的原因是cv::Mat是运行时类型的;无论数组是否实际包含uint8、int16、float等,都会调用相同的cv::sum();因此,所有案例都必须返回相同的类型。”“Scalar”包含4个双通道,可容纳所有情况(最多4个通道)。与其他使用编译时类型的矩阵实现不同,例如CImg,在CImg中,不同的元素类型通常有不同的函数返回类型。