首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >以编程方式删除Apple屏幕捕获阴影边框

以编程方式删除Apple屏幕捕获阴影边框
EN

Stack Overflow用户
提问于 2013-08-17 20:58:46
回答 2查看 210关注 0票数 1

内置的MacOS屏幕捕获程序(命令shift-4)有一个很好的特性,您可以点击空格键,只捕获一个窗口,如下所示:

我想以编程的方式查看一个图像目录(它们是PNG),确定它们是否有阴影,并自动裁剪它。我需要这个在Mac上运行。我想用Python写这个。我被告知,枕头现在是用Python管理图像的正确方法,但我不知道如何读取单个像素和裁剪图像。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-09-30 20:25:40

下面的代码使用和Python2.7来完成这个任务:

代码语言:javascript
复制
#!/usr/bin/env                                                                                                                       
# Removes the shadow from MacOS-Generated screen shots.                                                                              

import Image,os

if __name__=="__main__":
    image = Image.open(os.sys.argv[1])
    image = image.convert('RGBA')

    (width,height) = image.size
    def find_first_non_alpha_x():
        for i in range(width):
            if image.getpixel((i,height/2))[3]==255:
                return i
        raise RuntimeError("No non-alpha pixels on midline")

    def find_last_non_alpha_x():
        for i in range(width-1,0,-1):
            if image.getpixel((i,height/2))[3]==255:
                return i
        raise RuntimeError("No non-alpha pixels on midline")

    def find_first_non_alpha_y():
        for i in range(height):
            if image.getpixel((width/2,i))[3]==255:
                return i
        raise RuntimeError("No non-alpha pixels on midline")

    def find_last_non_alpha_y():
        for i in range(height-1,0,-1):
            if image.getpixel((width/2,i))[3]==255:
                return i
        raise RuntimeError("No non-alpha pixels on midline")

    x1 = find_first_non_alpha_x()
    y1 = find_first_non_alpha_y()
    x2  = find_last_non_alpha_x()
    y2  = find_last_non_alpha_y()

    y = image.crop((x1-1,y1-1,x2+1,y2+1))
    y.save(os.sys.argv[1]+"-cropped.png")
票数 0
EN

Stack Overflow用户

发布于 2013-08-17 22:05:57

以下是一些建议,不管您将使用哪个库。

窗口上有不变量:4个角,标题栏,大部分颜色一致,3个圆盘形状的按钮。

如果你能检测到按钮和标题栏,你可以很容易地找到顶部的角落。底部的角与顶部的角对称。

可能的解决办法

  • 应用Hough变换查找圆
  • 沿着水平轴(按钮)找到三个连续的圆圈
  • 应用Hough变换寻找垂直和水平线
  • 找到一个包含三个圆圈的四边形(标题栏)
  • 窗口的2个顶部角位于标题栏的顶部角周围。
  • 通过在拐角处带一个邻里形成一个小块
  • 在修补程序中应用边缘检测算法
  • 垂直地反映补丁的像素。
  • 垂直应用补丁匹配。例如,使用DP
  • 对两个顶角重复匹配以找到底部的角。

有了四个角,你就知道窗口的边框了,就可以解决裁剪问题了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18293290

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档