之前在做目标检测标注数据的时候,很多物体都是不规则,可以用多边形来标注,外加之前给图片打马赛克的时候只是用了最简单的矩形,如果要打多边形的马赛克呢,如何获取多边形中的所有点呢,想来想去,不知从何入手,于是换了一种思维方式,每个多边形都有它的外接矩形,只要我们可以判断这个矩形内的所有点有哪些属于这个多边形就可以了,所以这个问题转换成了判断一个点是否在多边形的内部,查了一下,方法有好几种,详见
Point in Polygon Strategieserich.realtimerendering.com这里我采用了射线交点法,解释一下就是对于点
,向任意方向发出一条射线,如果它与多边形的边的交点个数是奇数,则说明它在多边形内部,如果偶数,则说明它在外部。为了方便理解,可以做个图看看:
若沿着
,
变大的方向(向右)画射线,则图1的射线会和多边形有2个交点,而图2会1个交点。更复杂的图可以自己试着画画看。
我的代码也是采用固定
,让
不断变大,看看是否会和多边形的边相交,这里会出现一个问题就是,如果遇到多边形的顶点,怎么办,比如如下二图: