Post

Manipulador de Quadrantes de Imagem 🖼️

Um programa simples de processamento de imagem foi concebido para manipular quadrantes de uma imagem. Este programa oferece aos usuários a capacidade de selecionar quadrantes da imagem original e reposicioná-los conforme desejado na imagem resultante.

Seja M uma matriz representando a imagem original com dimensões M×N, onde M é o número de linhas (altura da imagem) e N é o número de colunas (largura da imagem).

Para dividir a imagem em quadrantes, podemos criar quatro submatrizes Q0, Q1, Q2, Q3, onde:

Q0Q1Q2Q3
  • Q0 corresponde à região superior esquerda da imagem original.
  • Q1 corresponde à região superior direita da imagem original.
  • Q2 corresponde à região inferior esquerda da imagem original.
  • Q3 corresponde à região inferior direita da imagem original.

Cada uma dessas submatrizes terá dimensões M2×N2.

Portanto, podemos expressar matematicamente as submatrizes da seguinte forma:

Q0=M[0:M2,0:N2]Q1=M[0:M2,N2:N]Q2=M[M2:M,0:N2]Q3=M[M2:M,N2:N]

Onde M[a:b,c:d] representa uma submatriz de M que vai da linha a até a linha b e da coluna c até a coluna d. Com os quadrantes Q0, Q1, Q2 e Q3 definidos, podemos realizar a substituição na matriz original.

Este processo de divisão de quadrantes pode ser facilmente realizado no OpenCV da seguinte forma em C++:

1
2
3
4
5
cv::Mat quadrants[4];
quadrants[0] = image(cv::Rect(0, 0, image.cols / 2, image.rows / 2));
quadrants[1] = image(cv::Rect(image.cols / 2, 0, image.cols / 2, image.rows / 2));
quadrants[2] = image(cv::Rect(0, image.rows / 2, image.cols / 2, image.rows / 2));
quadrants[3] = image(cv::Rect(image.cols / 2, image.rows / 2, image.cols / 2, image.rows / 2));

Para realizar a substituição e montar uma nova imagem a partir dos novos quadrantes, podemos utilizar a seguinte função em C++:

1
2
3
4
5
6
7
8
9
cv::Mat mountImage(cv::Mat quadrants[4])
{
  cv::Mat image, quadrantsTop, quadrantsBottom;
  cv::hconcat(quadrants[0], quadrants[1], quadrantsTop);
  cv::hconcat(quadrants[2], quadrants[3], quadrantsBottom);
  cv::vconcat(quadrantsTop, quadrantsBottom, image);

  return image;
};

Para verificar o código completo, acesse: Github.com/ErnaneJ/pdi/quadrants

Executar 🚀

1
make main && ./main

Para usar uma imagem diferente de “biel.png”, altere a linha 5 correspondente à macro IMAGE_FILE.

Saída 🖼️

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
🖼️  Quadrants - [biel.png] 🖼️

──────────────────────────────────────────────

📍 Which quadrant do you want to replace 1º (1-4)? 3
📍 Which quadrant do you want to replace 2º (1-4)? 2
📍 Which quadrant do you want to replace 3º (1-4)? 4
📍 Which quadrant do you want to replace 4º (1-4)? 1

💡 Do you want to show the quadrants individually (y/n)? y

✅ Quadrants successfully manipulated!

──────────────────────────────────────────────

🎓 Sudent: Ernane Ferreira - DCA0445
OriginalQuadrantes Manipulados
originalquadrantes
EsquerdaDireita
quadrante 1quadrante 2
quadrante 3quadrante 4
Esta postagem está licenciada sob CC BY 4.0 pelo autor.