2015-10-05 73 views
0

我已经计算出图像中区域的平均偏差值和标准偏差值。 代码:无法访问平均值

Mat img=imread("a.jpg"); 
Mat hsv1; 
Mat mean, stdev; 
cvtColor(img, hsv1, CV_BGR2HSV); 
cv::meanStdDev(hsv1, mean, stdev, superpixel_mask); 
cout << "mean: " << mean << endl << "standard deviation: " << stdev << endl; 

输出是:

mean: [150.8399251737039; 
    103.6980224478888; 
    226.161411010155] 
standard deviation: [23.98981564590477; 
    46.73491195049309; 
    34.41166394765997] 

我想访问这些数字。 我写的代码:

float Mi = mean.at<float>(0,0); 
cout << Mi << endl; 

它给出了错误:

OpenCV Error: Assertion failed (dims <= 2 && data && (unsigned)i0 < (unsigned)si 
ze.p[0] && (unsigned)(i1*DataType<_Tp>::channels) < (unsigned)(size.p[1]*channel 
s()) && ((((sizeof(size_t)<<28)|0x8442211) >> ((DataType<_Tp>::depth) & ((1 << 3 
) - 1))*4) & 15) == elemSize1()) in cv::Mat::at, file C:\OpenCV249\opencv\build\ 
include\opencv2/core/mat.hpp, line 537 
+2

谷歌是您的朋友:http://answers.opencv.org/question/6501/problem -with-meanstddev/ – user463035818

+1

你为什么认为他们被称为平均值......大公司。 – ThePerson

+0

'C:\ OpenCV249 \ opencv \ build \ include \ opencv2/core/mat.hpp,第537行'恕我直言,你必须使用最新版本。我确定你的代码使用OpenCV 3.0 – sturkmen

回答

0

这里的问题是,你试图使用at<float>一个CV_64FMat访问。

就可以解决这个样:

double Mi = mean.at<double>(0,0); 

或者宣告Scalar而不是Mat

Scalar mean, stdev; 
cv::meanStdDev(hsv1, mean, stdev, superpixel_mask); 
double Mi = mean[0];