【发布时间】:2012-03-20 21:57:56
【问题描述】:
我试图从 cv::Mat 中存储的图像中获取协方差矩阵。我需要它来计算马氏距离并尝试进行一些颜色分割。
这是我的代码:
Mat covar, selection, meanBGR;
selection = src(roi);
calcCovarMatrix(selection, covar, meanBGR, CV_COVAR_NORMAL|CV_COVAR_ROWS);
Mat src 来自网络摄像头和标准 BGR opencv 格式,因此为 CV_32FC3。像素以行向量顺序(蓝色,绿色,红色)存储(我认为)..所以我认为我的代码是正确的。但我收到此运行时错误:
mulTransposed 中的断言失败 (src.channels() == 1)
我也尝试用这种方式制作矢量:
vector<Scalar> samples;
for(int i=0; i<selection.rows; i++) {
for(int j=0; j<selection.cols; j++) {
Scalar pixel = selection.at<Scalar>(i,j);
Scalar sample(pixel[0], pixel[1], pixel[2]);
samples.push_back(sample);
}
}
calcCovarMatrix(samples, covar, meanBGR, CV_COVAR_NORMAL|CV_COVAR_ROWS);
但我总是遇到同样的错误。阅读manual 并没有任何想法。
【问题讨论】:
标签: c++ opencv covariance