【问题标题】:Cannot Access Mean Values无法访问平均值
【发布时间】:2015-10-06 18:26:32
【问题描述】:

我计算了图像中某个区域的均值和标准偏差值。 代码:

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

【问题讨论】:

  • 你为什么认为它们被称为平均值.... big meanies。
  • 'C:\OpenCV249\opencv\build\include\opencv2/core/mat.hpp, line 537' 恕我直言,您必须使用最新版本。我对使用 OpenCV 3.0 的代码没问题

标签: c++ opencv


【解决方案1】:

这里的问题是您尝试使用at&lt;float&gt; 访问CV_64F Mat

你可以这样解决:

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

或者声明Scalar而不是Mat

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-01
    • 1970-01-01
    • 2022-11-03
    • 2021-10-09
    相关资源
    最近更新 更多