Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/126.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ OpenCV中矩阵中的元素之和?_C++_Matlab_Opencv_Image Processing_Computer Vision - Fatal编程技术网

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中,不同的元素类型通常有不同的函数返回类型。