O objetivo desta atividade é observar como podemos utilizar de ferramentas computacionais da biblioteca OpenCV para modificar a imagem, cortando-a em pedaços e movendo esses pedaços para outros lugares pré-destinados. Para isso, uma imagem será dividida em 4 regiões, e essas regiões serão trocadas diagonalmente.
Desenvolvimento da atividade
A imagem a ser processada é a seguinte:

E após executar o programa, o resultado desejado é o seguinte:

Código no OpenCV
A priori, fora necessário o uso de funções do OpenCV, como o "Rect" e o "CopyTo". A ideia é simples, o programa "divide" a imagem em 4 partes e realiza a troca de regiões, armazenando o resultado em uma nova imagem. Aqui, podemos perceber que trocamos da seguinte forma: quadrante superior esquerdo com o quadrante inferior direito e quadrante superior direito com o quadrante inferior esquerdo.
#include <iostream>
#include <opencv2/highgui.hpp>
using namespace cv;
using namespace std;
int main(int, char**){
Mat image;
int larg, alt;
image = imread("mindful.png",CV_LOAD_IMAGE_COLOR);
if(!image.data)
cout << "A imagem não pôde ser carregada ou está corrompida." << endl;
larg=image.size().width;
alt=image.size().height;
Mat troca(alt, larg, image.type()); //Criação da matriz que receberá a imagem com as regiões trocadas
image(Rect(0, 0, larg/2, alt/2)).copyTo(troca(Rect(larg/2, alt/2, larg/2, alt/2))); //A partir da imagem retangular na região superior esquerda, realiza a cópia para a imagem resultante na posição inferior direita
image(Rect(0, alt/2, larg/2, alt/2)).copyTo(troca(Rect(larg/2,0, larg/2, alt/2))); //A partir da imagem retangular na região inferior esquerda, realiza a cópia para a imagem resultante na posição superior direita
image(Rect(larg/2,0,larg/2,alt/2)).copyTo(troca(Rect(0,alt/2, larg/2, alt/2))); //A partir da imagem retangular na região superior direita, realiza a cópia para a imagem resultante na posição inferior esquerda
image(Rect(larg/2,alt/2,larg/2,alt/2)).copyTo(troca(Rect(0,0, larg/2, alt/2))); //A partir da imagem retangular na região inferior direita, realiza a cópia para a imagem resultante na posição superior esquerda
imwrite("trocatroca.png", troca);
imshow("image", troca);
waitKey();
return 0;
}
O resultado da execução do programa pode ser observado na imagem Garnet and Stevonnie (Regiões Trocadas).