Neste artigo, aprenderemos como marcar várias imagens usando OpenCV.
Tópicos para cobrir:
- O que é uma marca d'água?
- Redimensionar imagens em OpenCV
- Criar marca d'água usando uma imagem
1. O que é uma marca d'água?
Uma marca d'água é um logotipo, Empresa, texto ou padrão que é intencionalmente sobreposto em imagens diferentes e é usado para proteger os direitos autorais da imagem.
Seu principal objetivo é promover uma marca e dificultar a cópia ou o uso da imagem original sem a permissão do proprietário..
As organizações profissionais costumam usar marcas d'água para impedir que outras pessoas usem seu conteúdo após hospedá-lo online..
Então, Você já pensou em adicionar uma marca d'água às suas imagens? Nós vamos, eu fiz.
Por exemplo, escrevemos blogs e mencionamos a fonte de imagens externas. Mas, E as imagens que você cria sozinho? Não seria bom deixar sua marca neles?
Viva! Vamos começar esta tarefa emocionante.
2. Redimensionar imagens em OpenCV
Redimensionar nada mais é do que dimensionar a imagem, o que significa redimensionar a imagem original. Podemos aumentar ou diminuir o tamanho da imagem com base nos requisitos de negócios.
O redimensionamento pode ser feito de várias maneiras.
1. Preservar proporção. A proporção de uma imagem é a proporção de sua largura para sua altura.
- Reduza ou aumente o tamanho da imagem
2. Não preserva a proporção
- Reduzir apenas a largura / aumentar, encolher altura apenas / aumentar
3. Altere a largura e a altura para valores específicos
Parece ótimo até agora, mas como fazemos isso na prática? A resposta é OpenCV e sua função de redimensionamento (). Leia mais sobre o recurso de redimensionamento do OpenCV neste documentação.
Sintaxe da função Cv2.resize ():
cv2.resize (src, dsize, interpolação)
- src – imagem de origem
- dsize: o tamanho desejado da imagem de saída
- interpolação – Definição da Wikipedia: É um método para construir (achar) novos pontos de dados com base no intervalo de um conjunto discreto de pontos de dados conhecidos.
Confira esta documentação para ler mais sobre sinalizadores de interpolação.
Agora, vamos tirar uma foto de amostra e mudar seu tamanho. Abaixo está a nossa imagem de exemplo.
Agora, tente exibi-lo usando OpenCV.
-
import cv2 img = cv2.imread('images / deer.JPG') cv2.imshow("Imagem original", img) cv2.waitKey(0) cv2.destroyAllWindows()
Abaixo está a aparência de nossa imagem quando exibida usando OpenCV. Como nossa imagem é de alta resolução, apenas parte disso é visível.
Então, definitivamente é necessário redimensioná-lo. Precisamos diminuir seu tamanho.
Etapas para redimensionar uma imagem no OpenCV:
- Leia a imagem usando cv2.imread ()
- Defina a nova largura e altura.
- Crie uma tupla para as novas dimensões
- Redimensione a imagem usando cv2.resize ()
- Sim é necessário, salvar imagem redimensionada no computador usando cv2.imwrite ()
- Mostra as imagens originais, redimensionadas usando cv2.imshow ()
1. Preservar proporção: reduz a escala da imagem para 20% de seu tamanho original.
(Estamos reduzindo o tamanho da imagem original para 20% de seu tamanho original. Portanto, Vamos criar uma tupla para as novas dimensões calculando o 20% da largura original, a 20% da altura original).
-
import cv2 img = cv2.imread('images / deer.JPG') percent_of_scaling = 20 new_width = int(img.shape[1] * percent_of_scaling / 100) new_height = int(img.shape[0] * percent_of_scaling / 100) new_dim = (new_width, new_height) resized_img = cv2.resize(img, new_dim, interpolação = cv2.INTER_AREA) nome do arquivo ="resized_img_aspect ratio.jpg" cv2.imwrite(nome do arquivo, resized_img) cv2.imshow("Imagem original", img) cv2.imshow("Imagem redimensionada", resized_img) cv2.waitKey(0) cv2.destroyAllWindows()
O código acima salva a imagem redimensionada e exibe as imagens redimensionadas originais.
Bem feito. Redimensionamos nossa imagem com sucesso levando em consideração a proporção da imagem.
2. Sem preservar a proporção do aspecto: apenas encolher / aumentar a largura, apenas encolher / aumentar a altura
As etapas para redimensionar serão as mesmas acima. A única diferença é que mantemos qualquer uma das duas dimensões inalteradas.
-
import cv2 img = cv2.imread('images / deer.JPG') new_dim = (img.shape[1], 500) # muda a altura resized_img = cv2.resize(img, new_dim, interpolação = cv2.INTER_AREA) cv2.imshow("Imagem original", img) cv2.imshow("Imagem redimensionada", resized_img) cv2.waitKey(0) cv2.destroyAllWindows()
Abaixo estão as fotos mostradas do código acima.
A imagem redimensionada está distorcida e não é a saída desejada.
3. Altere a largura e a altura para valores específicos
- import cv2
- img = cv2.imread ('imagens / veado.JPG ')
- new_dim = (450, 450)
- resized_img = cv2.resize (img, new_dim, interpolação = cv2.INTER_AREA)
- cv2.imshow (“Imagem original”, img)
- cv2.imshow (“Imagen redimensionada”, resized_img)
- cv2.waitKey (0)
- cv2.destroyAllWindows ()
Abaixo estão as fotos mostradas do código acima.
Isso parece meio legal, mas não tão bom quanto a imagem de saída com uma proporção preservada. É por isso que prefiro redimensionar, preservando a proporção do aspecto.
A próxima etapa é ver como criar uma marca d'água.
Criar marca d'água usando uma imagem
Eu escolhi colocar uma marca d'água com a imagem do meu nome. Faça uma foto do seu nome e experimente comigo.
Etapas para adicionar a marca d'água no centro de uma imagem:
Leia e redimensione imagens (imagem de marca d'água, imagem de entrada) Sim é necessário.
import cv2 img = cv2.imread('images / deer.JPG') marca d'água = cv2.imread("watermark.PNG") percent_of_scaling = 20 new_width = int(img.shape[1] * percent_of_scaling / 100) new_height = int(img.shape[0] * percent_of_scaling / 100) new_dim = (new_width, new_height) resized_img = cv2.resize(img, new_dim, interpolação = cv2.INTER_AREA) wm_scale = 40 wm_width = int(watermark.shape[1] * wm_scale / 100) wm_height = int(watermark.shape[0] * wm_scale / 100) wm_dim = (wm_width, wm_height) resized_wm = cv2.resize(marca d'água, wm_dim, interpolação = cv2.INTER_AREA)
Defina a posição do logotipo de acordo com as novas dimensões da imagem de entrada redimensionada.
h_img, w_img, _ = resized_img.shape center_y = int(h_img / 2) center_x = int(w_img / 2) h_wm, w_wm, _ = resized_wm.shape top_y = center_y - int(h_wm / 2) left_x = center_x - int(w_wm / 2) bottom_y = top_y + h_wm right_x = left_x + w_wm
Pegue o Região retangular de interesse (REI) e armazená-lo em uma variável chamada 'roi'.
roi = resized_img[top_y:bottom_y, left_x:right_x]
Sobrepor a marca d'água redimensionada à ROI usando cv2.addWeighted ()e armazená-lo em uma variável chamada 'resultado'.
resultado = cv2.addWeighted(Rei, 1, resized_wm, 0.3, 0)
Agora, adicione este resultado à imagem de entrada redimensionada
resized_img[top_y:bottom_y, left_x:right_x] = resultado
Salve a imagem de marca d'água resultante em seu computador
nome do arquivo ="watermarked_deer.jpg" cv2.imwrite(nome do arquivo, resized_img)
Exibir a imagem de marca d'água resultante
cv2.imshow("Imagem de entrada redimensionada", resized_img) cv2.waitKey(0) cv2.destroyAllWindows()
Então! Abaixo está a imagem com marca d'água resultante.
Até agora, aprendemos como colocar uma marca d'água em uma única imagem. Como nosso objetivo é marcar várias imagens, precisamos criar uma lista de todas as imagens de entrada e percorrê-las. Abaixo estão as fotos que irei usar.
Crie uma lista de imagens de entrada
-
importar os folderPath = "imagens" imgList = os.listdir(folderPath) imgList
Código para marcar várias imagens
-
import cv2 marca d'água = cv2.imread("watermark.PNG") wm_scale = 40 wm_width = int(watermark.shape[1] * wm_scale / 100) wm_height = int(watermark.shape[0] * wm_scale / 100) wm_dim = (wm_width, wm_height) resized_wm = cv2.resize(marca d'água, wm_dim, interpolação = cv2.INTER_AREA) h_wm, w_wm, _ = resized_wm.shape para imagem em imgList: img = cv2.imread(f '{folderPath}/{imagem}') percent_of_scaling = 20 new_width = int(img.shape[1] * percent_of_scaling / 100) new_height = int(img.shape[0] * percent_of_scaling / 100) new_dim = (new_width, new_height) resized_img = cv2.resize(img, new_dim, interpolação = cv2.INTER_AREA) h_img, w_img, _ = resized_img.shape center_y = int(h_img / 2) center_x = int(w_img / 2) top_y = center_y - int(h_wm / 2) left_x = center_x - int(w_wm / 2) bottom_y = top_y + h_wm right_x = left_x + w_wm roi = resized_img[top_y:bottom_y, left_x:right_x] resultado = cv2.addWeighted(Rei, 1, resized_wm, 0.3, 0) resized_img[top_y:bottom_y, left_x:right_x] = resultado filename = os.path.basename(imagem) cv2.imwrite("imagens com marca d'água / marca d'água_"+nome do arquivo, resized_img) cv2.imshow("Imagem com marca d'água", resized_img) cv2.waitKey(0) cv2.destroyAllWindows()
Finalmente, terminamos com a marca d'água em todas as imagens de entrada.
Notas finais:
Obrigado por ler até a conclusão. No final deste artigo, estamos familiarizados com o trabalho em algumas das operações OpenCV: ler várias imagens, redimensione e marque-os.
Eu espero que você tenha gostado de ler este artigo. Experimente por conta própria e sinta-se à vontade para compartilhá-lo com seus colegas estudantes..
Referências:
Baixe o arquivo de código para este Link do repositório GitHub.
Outros posts meus
Sinta-se à vontade para verificar minhas outras postagens do meu perfil do DataPeaker.
Você pode me encontrar em LinkedIn, Twitter no caso de você querer se conectar. Eu adoraria me conectar com você.
Para uma troca imediata de pensamentos, escreva para mim [e-mail protegido].
A mídia mostrada neste artigo não é propriedade da DataPeaker e é usada a critério do autor.