0 votos
por (20 puntos) en Python

Hola, buenas:

Para los que tienen conocimiento sobre el procesamiento de imagenes en python

El problema es que no puedo lograr que "img_back" se guarde en una ruta absoluta, es decir, similar a esto, por ejemplo:

  • imagen_filtro_mediana.save('/home/gerardo/Documentos/python/lena-filtro-mediana.jpg')

Dicho en otras palabras, tengo que lograr que  "img_back" se guarde en una ruta absoluta.

Aclaracion:

6° La 5 imagen es de color gris, similar a las anteriores. Ustedes pueden ver la 5 imagen agregando la linea de codigo:

  • imshow(img_back)

Saludos

Gracias

Ahora le paso el codigo:

# -*- coding: utf-8 -*-
#!/usr/bin/env python

import numpy as np
from numpy import array,uint8,uint16,uint32,float,int8,int16,int32
import cv2
from matplotlib import pyplot as plt
#from cv2 import *
from PIL import Image
import time
from scipy import ndimage
import os
from scipy.misc import imshow,imsave
divline = "="*80


print(divline)
print("COMPRESION TRANSFORMADA DE FOURIER")
print(divline)

#-----------------------------------------SE MUESTRA LA IMAGEN ORIGINAL A COLOR--------------------------------------------

print(divline)

#se muestra (se abre la imagen) la imagen de entrada
print("SE MUESTRA LA IMAGEN ORIGINAL")
imagen_original = Image.open('/home/gerardo/Documentos/python/imagenes-jpg/lena.jpg')
#se muestra la imagen
imagen_original.show()


print(divline)
time.sleep(3)
#aqui es donde empeiza a correr el proceso de ejecucion


#----------------------------------------------SE CONVIERTE LA IMAGEN A ESCALA DE GRISES-----------------------------

print("SE MUESTRA LA IMAGEN EN ESCALA DE GRISES")

def cargar(imagen):
    im = Image.open(imagen)
    ancho, altura = im.size
    pixels = im.load()
    return ancho,altura,pixels,im
#######################proceso de transformar la imagen a gris#############################################################
#######################################################################
def escala(imagen):
    ancho,altura,pixels,im = cargar(imagen)
    for i in range(ancho):
        for j in range(altura):
            (a,b,c) = pixels[i,j]
            suma = a+b+c
            prom = int(suma/3)
            a = prom ##igualamos
            b = prom ##igualamos
            c = prom ##igualamos
            pixels[i,j] = (a,b,c) ##igualamos
    im.save("/home/gerardo/Documentos/python/escala-gris.jpg") ##guardamos la imagen nueva
    return

escala( '/home/gerardo/Documentos/python/imagenes-jpg/lena.jpg')

#se abre la imagen
imagen_gris = Image.open('/home/gerardo/Documentos/python/escala-gris.jpg')
#se muestra la imagen
imagen_gris.show()

#------------------------------------SE APLICA LA TRANSFORMADA DE FOURIER-----------------------------------------------------------------
print(divline)
print("SE APLICA LA TRANSFORMADA DE FOURIER")
#print("SE APLICA LA TRANSFORMADA DE FOURIER")
#aqui te lee la imagen de entrada utilizando OPENCV
imagen_entrada = cv2.imread('/home/gerardo/Documentos/python/escala-gris.jpg', 0) 
#aplicamos un rango de presicion a la imagen, segun la siguiente fuente: Solo flotador de precisión: bit de signo, exponente de 8 bits, 23 bits de mantisa
img_float32 = np.float32(imagen_entrada) #float 32: Solo flotador de precisión: bit de signo, exponente de 8 bits, 23 bits de mantisa

#aplicamos la transformada de fourier
dft = cv2.dft(np.float32(img_float32),flags = cv2.DFT_COMPLEX_OUTPUT) #se aplica la transformada  rapida de fourier

dft_shift = np.fft.fftshift(dft) #Cambie la componente de frecuencia cero al centro del espectro. Se obtuvo de la siguiente fuente: http://docs.scipy.org/doc/numpy/reference/generated/numpy.fft.fftshift.html

magnitude_spectrum = 20*np.log(cv2.magnitude(dft_shift[:,:,0],dft_shift[:,:,1]))

#Se transforma en escala de grises la magnitud del espectro que paso por DFT
imagen_fourier = Image.fromarray(array(magnitude_spectrum,dtype=uint8))
#se muestra la imagen
imagen_fourier.show()
#se guarda la imagen
imagen_fourier.save('/home/gerardo/Documentos/python/lena-gris-transformada-fourier.jpg')

#---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
#----------------SE LE APLICA EL FILTRO DE LA MEDIANA---------------------------------------------------------------------------------------------------------
print(divline)
print("SE LE APLICA EL FILTRO DE LA MEDIANA")
#aplicando filtro de la media
#print("SE LE APLICA EL FILTRO DE LA MEDIANA")
#tomando como fuente de filtros: http://pybonacci.github.io/scipy-lecture-notes-ES/advanced/image_processing/index.html#filtrado-de-imagenes
med_denoised = ndimage.median_filter(img_float32, 3)

imagen_filtro_mediana = Image.fromarray(array(med_denoised,dtype=uint8))
#se muestra la imagen
imagen_filtro_mediana.show()
#se guarda la imagen
imagen_filtro_mediana.save('/home/gerardo/Documentos/python/lena-filtro-mediana.jpg')


#----------------------SE LE APLICA LA TRANSFORMADA INVERSA-----------------------------------------------------------------------------
print(divline)
print("SE LE APLICA LA TRANSFORMADA INVERSA")
#print("SE LE APLICA LA TRANSFORMADA INVERSA")
#aplicar la transformada inversa de Fourier, creando primero una mascara
rows, cols = imagen_entrada.shape
#--------------------------------------------------------------------
nrows = cv2.getOptimalDFTSize(rows)
ncols = cv2.getOptimalDFTSize(cols)
#----------------------------------------------------------------------------
crow,ccol = nrows/2 , ncols/2
#---------------------------------------------------------------------------
nimg = np.zeros((nrows,ncols))
nimg[:rows,:cols] = imagen_entrada

# create a mask first, center square is 1, remaining all zeros
mask = np.zeros((nrows,ncols,2),np.uint8)
mask[crow-30:crow+30, ccol-30:ccol+30] = 1

# apply mask and inverse DFT
fshift = dft_shift*mask
f_ishift = np.fft.ifftshift(fshift)
img_back = cv2.idft (f_ishift)
img_back = cv2.magnitude (img_back [:,:, 0], img_back [:,:, 1])

    

Por favor, accede o regístrate para responder a esta pregunta.

Preguntas relacionadas

0 votos
0 respuestas
0 votos
1 respuesta
preguntado por Damian2016 (80 puntos) May 2, 2017 en Java
Bienvenido a Dudas de Programación, donde puedes hacer preguntas y recibir respuestas sobre los problemas más frecuentes de los lenguajes de programación, frameworks de desarrollo y bases de datos que utilices. Foro de Línea de Código

Categorías

...