当前位置:  开发笔记 > 编程语言 > 正文

Python中的数字图像裁剪

如何解决《Python中的数字图像裁剪》经验,为你挑选了1个好方法。

从一位教授,一位物理学家那里得到了这个问题.

我是Python编程的初学者.我不是计算机专业人士我是物理学家.我试图在python中编写一个代码用于我自己的研究,这涉及一些图像处理.

我需要做的就是显示图像,然后使用鼠标选择感兴趣的区域,最后裁剪出所选区域.我可以使用ginput()函数在Matlab中完成此操作.

我尝试过使用PIL.但是我发现在发出命令Image.show()之后,显示图像但是程序暂停,除非我从图像窗口退出.有没有办法实现我的计划.我需要下载任何其他模块吗?请指教.



1> Andrew Cox..:

虽然我同意大卫你应该只使用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])

希望这可以帮助 :)

推荐阅读
oDavid_仔o_880
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有