Sabemos que o OpenCV é amplamente utilizado para trabalhar com imagens e possui uma ampla gama de funções para isso. Mas e se quisermos processar arquivos de imagem sem usar nenhuma biblioteca externa como o OpenCV. Vamos ver como podemos fazer isso.
Escala de imagem (usando interpolação do vizinho mais próximo):
Interpolação do vizinho mais próximo — esta é a maneira mais fácil de interpolar. Este método simplesmente determina o pixel vizinho "mais próximo" e assume um valor para sua intensidade.
Considere uma pequena imagem cuja largura é w e a altura é — h que queremos mudar de largura p para largura q, assumindo p > m e q > n. Agora precisamos de duas constantes de escala:
scale_x = p / w scale_y = q / h
Agora simplesmente iteramos sobre todos os pixels na imagem de saída, referindo-se aos pixels originais que estão copiando. dimensionando nossas variáveis de controle com scale_x e scale_y e arredondando os valores de índice dimensionados resultantes.
Representação visual:
A imagem tem 3X3 pixels (9 pixels no total), agora se quisermos aumentar o tamanho da imagem para 6X6, então, de acordo com o algoritmo vizinho mais próximo, 6/3 (ou seja, 2) pixels devem ter o mesmo valor RGB que o valor do pixel para a imagem original.
Programa de dimensionamento de imagem:
Saída: Escala de cinza da imagem:Usando a média value, esse método enfatiza a intensidade de um pixel, em vez de mostrar de que valores RGB ‚Äã‚Äãé composto. Quando calculamos o valor RGB médio e atribuímos o valor RGB para um pixel, já que o valor RGB do pixel é o mesmo, não será possível criar nenhuma cor, pois todas as cores são geradas devido a uma proporção diferente de RGB valores, pois neste caso a proporção seria 1:1:1. Portanto, a imagem renderizada parecerá uma imagem cinza. Representação visual: ![]() Programa de imagem em tons de cinza:
|
Saída:
Cortar uma imagem:
Cortar basicamente remove pixel indesejado. Isso pode ser feito colocando o pixel necessário em outra grade de imagens, cujo tamanho corresponda ao necessário após o corte.
Considere uma imagem com tamanho de 10 √ó 10 pixels, e se queremos apenas recortar o centro de uma imagem com tamanho de 4 √ó 4 pixels, então precisamos coletar valores de pixel ‚Äã‚Äãde (10-4) / 2, começando em (3, 3) até 4 pixels na direção x e 4 pixels na direção y.
Representação visual:
Cortador de imagem:
# usando matplotlib e numpy
import
matplotlib.image as img
import
numpy as npy
# lê a imagem na variável m
m
=
img.imread (
"taj.png"
)
# definição do tamanho da imagem largura (w) altura (h)
w, h
=
m.shape [:
2
]
# tamanho da imagem necessária após o corte
xNew
=
int
(w
*
1
/
4
)
yNew
=
int
(h
*
1
/
4
)
newImage
=
npy.zeros ([xNew, yNew,
4
])
# largura de impressão altura da imagem de origem
print
(w)
print
(h)
para
i
em
intervalo
(
1
, xNew):
for
j
em
intervalo
(
1
, yNew):
# recorte de 100 a 100 pixels da imagem original
newImage [i, j]
=
m [
100
+
i,
100
+
j]
# salve a imagem
img.imsave (
`cropped.png`
, newImage)
Saída: