【问题标题】:Why labels give me error为什么标签给我错误
【发布时间】:2013-09-02 05:06:09
【问题描述】:

我正在标记我的图像,但是我的这部分代码给了我错误运行时错误,我将标签分配给它,当我删除此行代码运行良好:

int count_2=0;
cv::Mat training_mat(num_img , dictionarySize,CV_32FC1);
cv::Mat labels(0,1,CV_32FC1);

for (k = all_names.begin(); k != all_names.end(); ++k)
{
    Dir=( (count_2 < files.size() ) ? YourImagesDirectory : YourImagesDirectory_2);

    Mat row_img_2 = cv::imread( Dir +*k, 0 );

    detector.detect( row_img_2, keypoints);

    RetainBestKeypoints(keypoints, 20);

    dextract.compute( row_img_2, keypoints, descriptors_1);

    Mat my_img = descriptors_1.reshape(1,1);

    my_img.convertTo( training_mat.row(count_2), CV_32FC1 );
    //training_mat.push_back(descriptors_1);

    ***Here is the error***
    //labels.at< float >(count_2, 0) = (count_2<nb_face)?1:-1; // 1 for face, -1 otherwise*/
    ++count_2;
}

在我的代码部分之上,我想给包含正图像的目录和 -1 给包含负图像的目录,nb_face 是正图像的file.size()

【问题讨论】:

    标签: c++ opencv computer-vision svm mat


    【解决方案1】:

    您需要在创建标签向量时为其指定大小。 否则,您会收到一个错误,即您使用超出范围的索引访问标签向量。

    所以尝试改变

    cv::Mat labels(0,1,CV_32FC1);
    

    cv::Mat labels(num_img,1,CV_32FC1);
    

    【讨论】:

    • 这里最好使用哪种方法:my_img.convertTo(training_mat.row(count_2), CV_32FC1);或 training_mat.push_back(descriptors_1);
    猜你喜欢
    • 2012-02-22
    • 1970-01-01
    • 2018-02-18
    • 2011-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-12
    相关资源
    最近更新 更多