Algoritmo de escala de cinza

Publicado por Renato Alencar (última atualização em 20/06/2014)

[ Hits: 6.442 ]

Download escala-de-cinza.tar.gz




Algoritmo de escala de cinza baseado na luminosidade do pixel pela visão humana.

  



Esconder código-fonte

#!/usr/bin/python
# -*- coding: utf-8 -*-
# Algoritmo de escala de cinza.
#
# O algoritmo se baseia na luminosidade de cada
# pixel, pela formula:
#       L = R*0.3 + B*0.59 + G*0.11
# Dado o resultado o algoritmo salva o pixel na forma
# LLL.
#
# Primeiro convertemos a imagem em JPEG para PPM (formato
# simples e sem compressão, sendo mais fácil a manipulação),
# então obtemos um buffer dos pixels, na classe Image.
#


import image
import sys
import os

if len(sys.argv) != 3:
    print 'Uso: %s IMAGEM-ENTRADA IMAGEM-SAIDA' % sys.argv[0]
    sys.exit(1)

fn = sys.argv[1]
out = sys.argv[2]

# Converte para PPM
os.system('jpegtopnm "%s" > /tmp/%d.ppm' % (fn, os.getpid()))

# Carrega a imagem
img = image.Image()
img.loadPPM('/tmp/%d.ppm' % os.getpid())

# Converte cada pixel em um pixel cinza baseado em sua luminosidade
for i in range(img.width):
    for j in range(img.height):
        pix = image.Pix(img.getPixel(i, j))
        lum = int(pix[0]*0.3 + pix[1]*0.59 + pix[2]*0.11)

        img.setPixel(i, j, image.Pix((lum, lum, lum)))

# Salva a imagem
img.savePPM('/tmp/%d.ppm' % os.getpid())
# Converte de volta
os.system('ppmtojpeg /tmp/%d.ppm > "%s"' % (os.getpid(), out))

os.remove('/tmp/%d.ppm' % os.getpid())

Scripts recomendados

Exemplo de cluster

Script para obter um wallpaper de como está o globo em tempo real

Scanner de rede em Python

Expressões numéricas

Virus, trojan, sei lá o que é isso, PARTE II


  

Comentários

Nenhum comentário foi encontrado.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts