Из того, что я вижу здесь , operator () для Mat нуждается в аргументе типа Mat, а не Mat &. Это, кажется, проблема здесь.
Попробуйте добавить временный объект типа Mat. Смотри ниже.
cv::Mat image1, image2;
cv::Rect rect1, rect2;
...
cv::Mat extractedImage2 = image1(rect2);
image1(rect1).copyTo(extractedImage2);
Но я должен сказать, что я не эксперт по openCV, так что это просто ответ, основанный на моих знаниях c ++.