
我看基本全都是根据 起始点的 xy 坐标 和矩形的长宽来截取的, 有没有 通过四个坐标点 如 (x1,y1)(x2,y2)(x3,y3)(x4,y4) 来截取矩形的方法?
1 Xusually 2020 年 3 月 27 日 你描述的其实是一回事儿啊。你四个点也需要截取矩形的话,起始点你选一个,其他长宽根据剩余的点就算出来了。 |
2 qiayue PRO 根据四个点计算旋转角度,把图片旋转之后再截图 |
3 wangxiaoaer 2020 年 3 月 27 日 via Android 外接矩形? |
4 U7Q5tLAex2FI0o0g 2020 年 3 月 27 日 楼主的意思是斜着截的那种? 不然给 4 个点和给起始+长宽,不是同一个概念么? |
7 Mithril 2020 年 3 月 27 日 做不到的。 你这四个点围出来的都不一定是个凸多边形。 多学学数学吧少年。。。 |
9 cccy0 OP  可能是这样子斜着的 |
10 woodensail 2020 年 3 月 27 日 楼上说的是不一定是个「凸」多边形。 也就是说你可能围出一个回力标的形状。 |
11 Xusually 2020 年 3 月 27 日 @cccy0 #7 的意思是你只给四个点的话,可能不是一个凸多边形。比如你设想一个三角形的三个顶点,再加上一个三角形内部的一个点,这四个点就不能构成一个凸多边形。 |
12 cccy0 OP @woodensail #10 四个点是有顺序的 |
14 Mithril 2020 年 3 月 27 日 @cccy0 四个独立点,不是一定可以围成凸多边形的。。。 你先百度一下凸多边形是个啥。 比如四个点,顺时针标记为 ABCD,那么多边形 ABCD 和多边形 ACBD 并不是同一个图形。同时你要定义好什么叫“内部”什么叫“外部”。 本质上是个图形学问题,跟你用什么语言没关系。 最简单的就是直接画个矩形的外接框,然后遍历这框里面所有点判断是否在多边形内。一般的话射线法就可以,不过同样有很多的细节情况需要考虑和处理。 |
15 luckyrayyy 2020 年 3 月 27 日 倒是个有意思的问题,完全可以自己写个工具啊 |
17 cccy0 OP |
18 cccy0 OP 就是上面这个阿里云的 API, 需要把识别出来的人脸部分图片 截取出来 |
19 U7Q5tLAex2FI0o0g 2020 年 3 月 27 日 根据四点,得到一个角度,把原图旋转这个角度,使其中两点的连线与 x 轴平行,就回到了正常的“原点+长宽”截图的情况了 @cccy0 #8 |
20 Xusually 2020 年 3 月 27 日 @cccy0 如果确认只是矩形的话,最简单的办法楼上提到了,计算好旋转量,旋转到一边和 x/y 轴平行后用普通的裁切。 如果不一定是矩形,可能是某个普通的凸四边形的话,外接普通矩形定界,遍历,留意边界。 |
21 cccy0 OP 他返回的这个点, 是矩阵旋转之前的点 |
22 jmc891205 2020 年 3 月 27 日 via iPhone 就截一个水平的外接矩形出来呗 多截的那些地方会影响到你? 斜着的直线会经过很多不完整的像素 处理起来很麻烦 |
23 woodensail 2020 年 3 月 27 日 @cccy0 四个点,坐标分别是,[0,0] [10,0] [0,10] [1,1] 你来围一个凸多边形看看。 |
24 Mithril 2020 年 3 月 27 日 这个倒是很简单。 因为原图肯定是矩形的,那么你就根据合适的分辨率新建一个矩形的图。 然后通过他给你的四个顶点位置,计算出来从新图坐标到你识别图坐标的变换矩阵。 然后遍历新图的每个像素,根据矩阵算出来原始图的像素坐标位置,插一下值。 这样一步操作可以连正畸加抠图全做了。 实际上核心就是算个透视变换的矩阵。 实在不会你可以 OpenCV 扣个代码改成 Java 的。 |
25 jifengg 2020 年 4 月 4 日 我觉得楼主可以搜索”多边形截取”,应该能得到你要的结果 |