Esteganografía de imágenes usando OpenCV en Python

La esteganografía de imágenes es el proceso de ocultar datos secretos en alguna imagen. En esta publicación, ocultaremos una imagen dentro de otra y la convertiremos en otra imagen y luego extraeremos ambas imágenes de la imagen anterior.

La idea detrás de la esteganografía basada en imágenes es muy simple. Las imágenes están compuestas de datos digitales (píxeles), que describen lo que hay dentro de la imagen, generalmente los colores de todos los píxeles. Como sabemos, cada imagen está compuesta de píxeles y cada píxel contiene 3 valores (rojo, verde, azul).

Por ejemplo, supongamos que tenemos que ocultar img2 en img1, donde tanto img1 como img2 son numpy nduna array de valores de píxeles. El tamaño de img2 debe ser menor que el tamaño de img1. Estamos usando imágenes en color, por lo que ambas tendrán 3 valores (rojo, verde, azul). Cada valor de píxel varía de 0 a 255, por lo que cada valor de píxel es de 1 byte u 8 bits. Sea img[i][j][l]el valor de píxel en la ubicación (i, j)y del canal l donde i varía de 0 a ancho y j varía de 0 a alto y l varía de 0 a 2.

Nota: La calidad de las nuevas imágenes es un poco menor que las imágenes antiguas.

Codificación

Sea img1[i][j][l]y img2[i][j][l]sea un valor de píxel de cada imagen. Sea v1 una representación binaria de 8 bits img1[i][j][l]y v2 una representación binaria de 8 bits de img2[i][j][l]. Por lo tanto, v3=v1[:4]+v2[:4]donde v3 son los primeros 4 bits de v1 y v2. Luego asignamos img1[i][j][l]a v3.

Aquí img1 es la imagen final producida después de la codificación.

Descodificación

Sea img[i][j][l]el valor de píxel de la imagen. Sea v1 una representación binaria de 8 bits de img[i][j][l]. Vamos bits aleatorios v2=v1[:4]+4y v3=v1[4:]+4bits aleatorios. Luego asignamos img1[i][j][l]a v2 y img2[i][j][l]a v3.

Aquí img1 e img2 son las imágenes finales producidas después de la decodificación.

Implementación

Consideremos que las imágenes utilizadas son las siguientes:

Imagen 1

image-stegnography-python

Imagen 2

image-stegnography-python

Queremos ocultar image2 en image1. A continuación se muestra la implementación.

# Python program to demonstrate
# image steganography using OpenCV
  
  
import cv2
import numpy as np
import random
  
  
# Encryption function
def encrypt():
      
    # img1 and img2 are the
    # two input images
    img1 = cv2.imread('pic1.jpg')
    img2 = cv2.imread('pic2.jpg')
      
    for i in range(img2.shape[0]):
        for j in range(img2.shape[1]):
            for l in range(3):
                  
                # v1 and v2 are 8-bit pixel values
                # of img1 and img2 respectively
                v1 = format(img1[i][j][l], '08b')
                v2 = format(img2[i][j][l], '08b')
                  
                # Taking 4 MSBs of each image
                v3 = v1[:4] + v2[:4] 
                  
                img1[i][j][l]= int(v3, 2)
                  
    cv2.imwrite('pic3in2.png', img1)
  
      
# Decryption function
def decrypt():
      
    # Encrypted image
    img = cv2.imread('pic3in2.png') 
    width = img.shape[0]
    height = img.shape[1]
      
    # img1 and img2 are two blank images
    img1 = np.zeros((width, height, 3), np.uint8)
    img2 = np.zeros((width, height, 3), np.uint8)
      
    for i in range(width):
        for j in range(height):
            for l in range(3):
                v1 = format(img[i][j][l], '08b')
                v2 = v1[:4] + chr(random.randint(0, 1)+48) * 4
                v3 = v1[4:] + chr(random.randint(0, 1)+48) * 4
                  
                # Appending data to img1 and img2
                img1[i][j][l]= int(v2, 2)
                img2[i][j][l]= int(v3, 2)
      
    # These are two images produced from
    # the encrypted image
    cv2.imwrite('pic2_re.png', img1)
    cv2.imwrite('pic3_re.png', img2)
      
      
# Driver's code
encrypt()
decrypt()

Producción:

Después del cifrado:

image-stegnography-python

Después del descifrado:

Imagen 1

image-stegnography-python

Imagen 2

image-stegnography-python

Publicación traducida automáticamente

Artículo escrito por shobhitgupta907 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *