Vector.push_back (pair <int, int> (x1, x2)); не работает - PullRequest
0 голосов
/ 17 июня 2019

Я использовал цикл DLIB parallel_for для некоторой обработки и добавления координат к вектору>, который был объявлен вне цикла. Но я не могу использовать функцию vector.push_back () из цикла.

Проверено, есть ли какие-либо проблемы с декларацией. Передал векторный указатель на функцию лямбда-цикла loop_for.

    //Store cordinates of respective face_image
    std::vector<pair<int,int>> xy_coords;

    //Create a dlib image window
    window.clear_overlay();
    window.set_image(dlib_frame);

    auto detections = f_detector(dlib_frame);

    dlib::parallel_for(0, detections.size(), [&,detections,xy_coords](long i)
        {
            auto det_face = detections[i];

            //Display Face data to the user
            cout << "Face Found! " << "Area: " << det_face.area() << "X: " <<det_face.left() << "Y: " << det_face.bottom() << endl;

            //Get the Shape details from the face
            auto shape = sp(dlib_frame, det_face);


            //Extract Face Image from frame
            matrix<rgb_pixel> face_img;
            extract_image_chip(dlib_frame, get_face_chip_details(shape, 150, 0.25), face_img);
            faces.push_back(face_img);
            //Add the coordinates to the coordinates vector

            xy_coords.push_back(std::pair<int,int>((int)det_face.left(),(int)det_face.bottom()));

            //Add face to dlib image window
            window.add_overlay(det_face);

        });

1 Ответ

1 голос
/ 17 июня 2019

Ваша лямбда захватывает xy_coords копией, та, в которую вы вставляете внутри лямбды, не та же самая снаружи.Попробуйте захватить его по ссылке, например, [&,&xy_coords,detections] или просто [&,detections].

Для получения дополнительной информации см. Здесь: https://en.cppreference.com/w/cpp/language/lambda#Lambda_capture

...