如何计算和使用cvMat的平均值

20

在openCV的作弊表(C++)中,我发现了矩阵操作mean()。当我使用它时:

float myMatMean = mean( MyMat );

我收到了以下错误:

不存在适合的转换函数从“cv::Scalar”到“float”

我该怎么做才能使用这些数据?


20
mean()似乎返回了一个类型为cv::Scalar的变量,因此尝试使用cv::Scalar myMatMean = mean(MyMat); - hmjd
我认为如果您不想麻烦使用Scalar,可以使用double而不是float来使其工作。但是Scalar可以为您提供所有通道的平均值。 - remi
1个回答

44

谢谢。

问题在于,虽然myMat是一个二维图像,但返回类型仍然是大小为4Scalar

解决方法是

cv::Scalar tempVal = cv::mean( myMat );
float myMAtMean = tempVal.val[0];

1
什么是mean?哪个头文件?哪个命名空间?当您使用这些非标准函数时,请放置所使用的命名空间。 - Mehdi
1
问题不在于“图像是2D”,而在于图像可以具有多个颜色平面(在openCV中通常为B,G,R用于彩色图像),并且平均值按颜色平面计算,使您每个颜色平面得到一个值,因此是Scalar。除非它是灰度图像,否则您的解决方案将为您提供图像蓝色部分的平均值。 - Bjørn van Dommelen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接