【问题标题】:calcCovarMatrix in multichannel image and unresolved assertion error多通道图像中的 calcCovarMatrix 和未解决的断言错误
【发布时间】: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


    【解决方案1】:

    我认为您不能将 3 通道矩阵传递给它。这个小样本是否有效:

    #include <opencv2/core/core.hpp>
    #include <opencv2/highgui/highgui.hpp>
    
    #include <iostream>
    
    using namespace cv;
    using namespace std;
    
    int main(int /*argc*/, char** /*argv*/)
    {
        Mat_<float> samples = (Mat_<float>(3, 3) << 1.0, 2.0, 3.0,
                                                    4.0, 5.0, 6.0,
                                                    7.0, 8.0, 9.0);
    
        Mat cov, mu;
        cv::calcCovarMatrix(samples, cov, mu, CV_COVAR_NORMAL | CV_COVAR_ROWS);
    
        cout << "cov: " << endl;
        cout << cov << endl;
    
        cout << "mu: " << endl;
        cout << mu << endl;
    
        return 0;
    }
    

    它应该输出:

    cov: 
    [18, 18, 18;
      18, 18, 18;
      18, 18, 18]
    mu: 
    [4, 5, 6]
    

    希望有帮助!

    【讨论】:

    • 是的,好的,谢谢你的清晰例子,但是这样吗?如何在皮肤分割中获得马氏距离的协方差矩阵?我指的是我上一个问题的答案中解释的方法:dsp.stackexchange.com/a/1634/1063
    【解决方案2】:

    我遇到了同样的问题。不幸的是,我认为获得颜色协方差的唯一方法是手动进行。如果您将图像拆分,然后将生成的矩阵重组为单行,将它们重新组合在一起(进入 3 行 1 通道垫),您可以乘以转置并除以大小 - 1。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-01-07
      • 2019-02-28
      • 1970-01-01
      • 2020-07-14
      • 2014-10-11
      • 2020-12-14
      • 2022-12-03
      • 2021-12-19
      相关资源
      最近更新 更多