【问题标题】:Convert vectors of mat to Mat file in order to use opencv svm将 mat 的向量转换为 Mat 文件以使用 opencv svm
【发布时间】:2014-02-18 08:55:30
【问题描述】:

我有两个向量,我想将它们转换为 Mat 文件,以便使用 opencv 的 SVM 训练。我得到的向量是一个用于训练数据的向量和一个用于标签的向量。如何将它们从 svmtrain 转换为必要的类型?/

for(int i=0; i<face.size();i++){
        img = imread("faceNface/face/"+face.at(i),1);
        cvtColor(img, img, CV_BGR2GRAY);
        img = img.reshape(1, 12100).t();
        trainData.push_back(img);
        lbs.push_back(1);
    }

    for(int i=0; i<non_face.size();i++){
        img = imread("faceNface/nonface/"+non_face.at(i), 1);
        cvtColor(img, img, CV_BGR2GRAY);
        img = img.reshape(1, 12100).t();
        trainData.push_back(img);
        lbs.push_back(-1);
    }

【问题讨论】:

    标签: c++ arrays opencv vector svm


    【解决方案1】:

    如果您的标签向量类型是std::vector&lt;double&gt;,那么您可以使用以下函数。如果不是,您需要进行一些更改。我相信你能想出来的。

    cv::Mat Classifier::vectorToMat(std::vector<double> data)
    {
        int size = data.size();
        cv::Mat mat(size, 1, CV_32F);
        for(int i = 0; i < size; ++i)
        {
            mat.at<float>(i, 0) = data[i];
        }
        return mat;
    }
    

    对于数据本身,我有两个建议给你;

    1) 将你的 1x12100 大小的图片转换为std::vector&lt;double&gt;,然后你将有std::vector&lt;std::vector&lt;double&gt;&gt;trainData,然后你可以使用下面的函数。

    cv::Mat Classifier::vectorToMat(std::vector<std::vector<double> > data)
    {
        int height = data.size();
        std::vector<double> vectorData = data[0];
        int width = vectorData.size();
    
        cv::Mat mat(height, width, CV_32F);
        for(int i = 0; i < height; ++i)
        {
            for(int j = 0; j < width; ++j)
            {
                mat.at<float>(i,j) = data[i][j];
            }
        }
        return mat;
    }
    

    2) 修改我发布的代码以使用std::vector&lt;cv::Mat&gt; 执行相同的操作。实际上这样做更好,因为如果这样做,您首先不需要将cv::Mat转换为std::vector&lt;double&gt;,并且操作更少。

    希望对你有帮助。

    【讨论】:

      猜你喜欢
      • 2013-09-02
      • 2013-10-05
      • 2012-11-21
      • 1970-01-01
      • 1970-01-01
      • 2014-12-28
      • 2012-07-17
      • 2011-09-12
      • 2018-09-04
      相关资源
      最近更新 更多