Почему переменная становится 'const', когда я использую захват [=] (используя класс Lambda)?

Помещение № 1Я уже исправил ошибку, но я не до конца понял причину ошибки компилятора.

Помещение № 2Цель этой программы - скопировать изображение в другое изображение с помощью многопоточного процесса. Возможно, существует лучший способ, но это не основная тема вопроса (см. Предпосылку № 1).

Я написал простую программу, использующую библиотеку OpenCV 3.1 для копирования изображения в другое изображение. Он использует все ядра процессора, используя больше потоков.

Код:

#include <opencv2/opencv.hpp>
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <thread>

using namespace cv;
using namespace std;

#define IMG_PATH "..\\img\\50a.png"


void copy_image(const Mat& input, Mat& output, int row_offset, int skip_row)
{
    cout << row_offset;
    Size size = input.size();
    for (int r = row_offset; r < size.height; r += skip_row)
    {
        for (int c = 0; c < size.width; c++)
        {
            output.at<Vec3b>(r, c) = input.at<Vec3b>(r, c);
        }
    }
}

int main()
{
    Mat input_img = imread(IMG_PATH);
    Mat output_img = Mat(input_img.size(), input_img.type()); output_img.setTo(255);

    vector<thread> threads;
    int thread_number = thread::hardware_concurrency();

    for (int i = 0; i < thread_number; i++)
    {
        cout << i;
        auto var = [=]() 
        {
            return copy_image(input_img, output_img, i, thread_number);
        };

        threads.push_back(thread(var));
    }

    for (auto& thread : threads) 
        thread.join();

    imshow("output_img", output_img);
    imwrite("result.png", output_img);
    waitKey(0);
}

Компилятор возвращает мне эту ошибку

Ошибка C2664 «void copy_image (const cv :: Mat &, cv :: Mat &, int, int)»: невозможно преобразовать аргумент 2 из «const cv :: Mat» в «cv :: Mat &»

что он ссылается на эту строку кода:

return copy_image(input_img, output_img, i, thread_number);

Я решил эту ошибку, заменив эту строку

auto var = [=]()

с этим

auto var = [=, &input_img, &output_img]() 

но на самом деле я не очень понимаю, почему я получил эту ошибку.

Ответы на вопрос(2)

Ваш ответ на вопрос