从一位教授,一位物理学家那里得到了这个问题.
我是Python编程的初学者.我不是计算机专业人士我是物理学家.我试图在python中编写一个代码用于我自己的研究,这涉及一些图像处理.
我需要做的就是显示图像,然后使用鼠标选择感兴趣的区域,最后裁剪出所选区域.我可以使用ginput()函数在Matlab中完成此操作.
我尝试过使用PIL.但是我发现在发出命令Image.show()之后,显示图像但是程序暂停,除非我从图像窗口退出.有没有办法实现我的计划.我需要下载任何其他模块吗?请指教.
虽然我同意大卫你应该只使用GIMP或其他一些图像处理程序,但这是一个脚本(因为我把它作为练习给读者)使用pygame来做你想要的.您将需要安装pygame以及PIL,用法如下:
scriptname.py
实际脚本:
import pygame, sys from PIL import Image pygame.init() def displayImage( screen, px, topleft): screen.blit(px, px.get_rect()) if topleft: pygame.draw.rect( screen, (128,128,128), pygame.Rect(topleft[0], topleft[1], pygame.mouse.get_pos()[0] - topleft[0], pygame.mouse.get_pos()[1] - topleft[1])) pygame.display.flip() def setup(path): px = pygame.image.load(path) screen = pygame.display.set_mode( px.get_rect()[2:] ) screen.blit(px, px.get_rect()) pygame.display.flip() return screen, px def mainLoop(screen, px): topleft = None bottomright = None runProgram = True while runProgram: for event in pygame.event.get(): if event.type == pygame.QUIT: runProgram = False elif event.type == pygame.MOUSEBUTTONUP: if not topleft: topleft = event.pos else: bottomright = event.pos runProgram = False displayImage(screen, px, topleft) return ( topleft + bottomright ) if __name__ == "__main__": screen, px = setup(sys.argv[1]) left, upper, right, lower = mainLoop(screen, px) im = Image.open(sys.argv[1]) im = im.crop(( left, upper, right, lower)) im.save(sys.argv[2])
希望这可以帮助 :)