Pygameで画像処理

鮮鋭化です。

import pygame
import math

def saturate(param):
	if(param < 0): ret = 0
	elif(param > 255): ret = 255
	else: ret = param
	return ret
# 鮮鋭化
# @param tBuf サーフェス
# @return 変換後のサーフェス
def transSharp(tBuf):
	retBuf = pygame.transform.scale(tBuf, tBuf.get_size())
	
	for j in range(1, retBuf.get_height()-1):
		for i in range(1, retBuf.get_width()-1):
			color1 = tBuf.get_at((i,   j))
			color2 = tBuf.get_at((i-1, j))
			color3 = tBuf.get_at((i+1, j))
			color4 = tBuf.get_at((i,   j-1))
			color5 = tBuf.get_at((i,   j+1))
			color = (
				saturate(color1[0]-((color2[0]+color3[0]+color4[0]+color5[0])-(color1[0]*4))),
				saturate(color1[1]-((color2[1]+color3[1]+color4[1]+color5[1])-(color1[1]*4))),
				saturate(color1[2]-((color2[2]+color3[2]+color4[2]+color5[2])-(color1[2]*4))),
				255)
			retBuf.set_at((i, j), color)
	return retBuf
# Main
def main():
	pygame.init()
	pygame.display.set_mode((250, 250), 0, 32)
	pygame.display.set_caption("鮮鋭化")
	_gScr = pygame.display.get_surface()
	tBuf = pygame.image.load("nyan.bmp").convert()

	tBuf = transSharp(tBuf)
	while True:
		_gScr.blit(tBuf, (0, 0), tBuf.get_rect())
		pygame.display.update()
		for e in pygame.event.get():
			if e.type == pygame.QUIT: return
		pygame.time.wait(10)

if __name__ == '__main__':
	main()