Java 有什么能根据四个坐标点截取图片一部分的方法 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
cccy0

Java 有什么能根据四个坐标点截取图片一部分的方法

  •  
  •   cccy0 2020 年 3 月 27 日 2249 次点击
    这是一个创建于 2219 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我看基本全都是根据 起始点的 xy 坐标 和矩形的长宽来截取的, 有没有 通过四个坐标点 如 (x1,y1)(x2,y2)(x3,y3)(x4,y4) 来截取矩形的方法?

    25 条回复    2020-04-04 21:37:20 +08:00
    Xusually
        1
    Xusually  
       2020 年 3 月 27 日
    你描述的其实是一回事儿啊。你四个点也需要截取矩形的话,起始点你选一个,其他长宽根据剩余的点就算出来了。
    qiayue
        2
    qiayue  
    PRO
       2020 年 3 月 27 日
    根据四个点计算旋转角度,把图片旋转之后再截图
    wangxiaoaer
        3
    wangxiaoaer  
       2020 年 3 月 27 日 via Android
    外接矩形?
    U7Q5tLAex2FI0o0g
        4
    U7Q5tLAex2FI0o0g  
       2020 年 3 月 27 日
    楼主的意思是斜着截的那种?
    不然给 4 个点和给起始+长宽,不是同一个概念么?
    cccy0
        5
    cccy0  
    OP
       2020 年 3 月 27 日
    @Xusually #1 说错了, 不一定是矩形, 可能是四个点围成的别的四边形
    cccy0
        6
    cccy0  
    OP
       2020 年 3 月 27 日
    @littleylv #4 可能这四个点围起来的四边形是斜着的
    Mithril
        7
    Mithril  
       2020 年 3 月 27 日
    做不到的。
    你这四个点围出来的都不一定是个凸多边形。
    多学学数学吧少年。。。
    cccy0
        8
    cccy0  
    OP
       2020 年 3 月 27 日
    @Mithril #7 一定是个四边形的, 不存在 俩点 xy 相同的这种情况
    cccy0
        9
    cccy0  
    OP
       2020 年 3 月 27 日
    ![GPJbnI.png]( https://s1.ax1x.com/2020/03/27/GPJbnI.png)
    可能是这样子斜着的
    woodensail
        10
    woodensail  
       2020 年 3 月 27 日
    楼上说的是不一定是个「凸」多边形。
    也就是说你可能围出一个回力标的形状。
    Xusually
        11
    Xusually  
       2020 年 3 月 27 日
    @cccy0 #7 的意思是你只给四个点的话,可能不是一个凸多边形。比如你设想一个三角形的三个顶点,再加上一个三角形内部的一个点,这四个点就不能构成一个凸多边形。
    cccy0
        12
    cccy0  
    OP
       2020 年 3 月 27 日
    @woodensail #10 四个点是有顺序的
    cccy0
        13
    cccy0  
    OP
       2020 年 3 月 27 日
    @Xusually #11 四个点是有顺序的, 不存在这种情况
    Mithril
        14
    Mithril  
       2020 年 3 月 27 日
    @cccy0 四个独立点,不是一定可以围成凸多边形的。。。
    你先百度一下凸多边形是个啥。
    比如四个点,顺时针标记为 ABCD,那么多边形 ABCD 和多边形 ACBD 并不是同一个图形。同时你要定义好什么叫“内部”什么叫“外部”。
    本质上是个图形学问题,跟你用什么语言没关系。
    最简单的就是直接画个矩形的外接框,然后遍历这框里面所有点判断是否在多边形内。一般的话射线法就可以,不过同样有很多的细节情况需要考虑和处理。
    luckyrayyy
        15
    luckyrayyy  
       2020 年 3 月 27 日
    倒是个有意思的问题,完全可以自己写个工具啊
    cccy0
        16
    cccy0  
    OP
       2020 年 3 月 27 日
    @Mithril #14 哦哦,. 数学不是很好
    cccy0
        18
    cccy0  
    OP
       2020 年 3 月 27 日
    就是上面这个阿里云的 API, 需要把识别出来的人脸部分图片 截取出来
    U7Q5tLAex2FI0o0g
        19
    U7Q5tLAex2FI0o0g  
       2020 年 3 月 27 日
    根据四点,得到一个角度,把原图旋转这个角度,使其中两点的连线与 x 轴平行,就回到了正常的“原点+长宽”截图的情况了
    @cccy0 #8
    Xusually
        20
    Xusually  
       2020 年 3 月 27 日
    @cccy0 如果确认只是矩形的话,最简单的办法楼上提到了,计算好旋转量,旋转到一边和 x/y 轴平行后用普通的裁切。
    如果不一定是矩形,可能是某个普通的凸四边形的话,外接普通矩形定界,遍历,留意边界。
    cccy0
        21
    cccy0  
    OP
       2020 年 3 月 27 日
    他返回的这个点, 是矩阵旋转之前的点
    jmc891205
        22
    jmc891205  
       2020 年 3 月 27 日 via iPhone
    就截一个水平的外接矩形出来呗
    多截的那些地方会影响到你?

    斜着的直线会经过很多不完整的像素 处理起来很麻烦
    woodensail
        23
    woodensail  
       2020 年 3 月 27 日
    @cccy0 四个点,坐标分别是,[0,0] [10,0] [0,10] [1,1]
    你来围一个凸多边形看看。
    Mithril
        24
    Mithril  
       2020 年 3 月 27 日
    这个倒是很简单。
    因为原图肯定是矩形的,那么你就根据合适的分辨率新建一个矩形的图。
    然后通过他给你的四个顶点位置,计算出来从新图坐标到你识别图坐标的变换矩阵。
    然后遍历新图的每个像素,根据矩阵算出来原始图的像素坐标位置,插一下值。
    这样一步操作可以连正畸加抠图全做了。

    实际上核心就是算个透视变换的矩阵。
    实在不会你可以 OpenCV 扣个代码改成 Java 的。
    jifengg
        25
    jifengg  
       2020 年 4 月 4 日
    我觉得楼主可以搜索”多边形截取”,应该能得到你要的结果
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2624 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 83ms UTC 15:29 PVG 23:29 LAX 08:29 JFK 11:29
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86