本文整理汇总了Python中pyclipper.Pyclipper方法的典型用法代码示例。如果您正苦于以下问题:Python pyclipper.Pyclipper方法的具体用法?Python pyclipper.Pyclipper怎么用?Python pyclipper.Pyclipper使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类pyclipper
的用法示例。
在下文中一共展示了pyclipper.Pyclipper方法的9个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: _prepare_clipper
# 需要导入模块: import pyclipper [as 别名]
# 或者: from pyclipper import Pyclipper [as 别名]
def _prepare_clipper(self, poly):
"""Prepare 3D polygons for clipping operations.
:param poly: The clip polygon.
:returns: A Pyclipper object.
"""
if not self.is_coplanar(poly):
return False
poly1 = self.project_to_2D()
poly2 = poly.project_to_2D()
s1 = pc.scale_to_clipper(poly1.vertices_list)
s2 = pc.scale_to_clipper(poly2.vertices_list)
clipper = pc.Pyclipper()
clipper.AddPath(s1, poly_type=pc.PT_SUBJECT, closed=True)
clipper.AddPath(s2, poly_type=pc.PT_CLIP, closed=True)
return clipper
示例2: join_polys
# 需要导入模块: import pyclipper [as 别名]
# 或者: from pyclipper import Pyclipper [as 别名]
def join_polys(polys, scale=True):
""" Given a list of polygons, merge them (union) and return a list
of merged polygons
"""
pc = pyclipper.Pyclipper()
if scale:
polys = scale_to_clipper(polys)
results=[]
pc.AddPaths(polys, pyclipper.PT_SUBJECT, True)
clip_polys = pc.Execute(pyclipper.CT_UNION, pyclipper.PFT_NONZERO,
pyclipper.PFT_NONZERO)
if scale:
clip_polys = scale_from_clipper(clip_polys)
results.extend([cp for cp in clip_polys])
pc.Clear()
return results
示例3: make_valid_pyclipper
# 需要导入模块: import pyclipper [as 别名]
# 或者: from pyclipper import Pyclipper [as 别名]
def make_valid_pyclipper(shape):
"""
Use the pyclipper library to "union" a polygon on its own. This operation
uses the even-odd rule to determine which points are in the interior of
the polygon, and can reconstruct the orientation of the polygon from that.
The pyclipper library is robust, and uses integer coordinates, so should
not produce any additional degeneracies.
Before cleaning the polygon, we remove all degenerate inners. This is
useful to remove inners which have collapsed to points or lines, which can
interfere with the cleaning process.
"""
# drop all degenerate inners
clean_shape = _drop_degenerate_inners(shape)
pc = pyclipper.Pyclipper()
try:
pc.AddPaths(_coords(clean_shape), pyclipper.PT_SUBJECT, True)
# note: Execute2 returns the polygon tree, not the list of paths
result = pc.Execute2(pyclipper.CT_UNION, pyclipper.PFT_EVENODD)
except pyclipper.ClipperException:
return MultiPolygon([])
return _polytree_to_shapely(result)
示例4: iou_score
# 需要导入模块: import pyclipper [as 别名]
# 或者: from pyclipper import Pyclipper [as 别名]
def iou_score(box1, box2):
"""Returns the Intersection-over-Union score, defined as the area of
the intersection divided by the intersection over the union of
the two bounding boxes. This measure is symmetric.
Args:
box1: The coordinates for box 1 as a list of (x, y) coordinates
box2: The coordinates for box 2 in same format as box1.
"""
if len(box1) == 2:
x1, y1 = box1[0]
x2, y2 = box1[1]
box1 = np.array([[x1, y1], [x2, y1], [x2, y2], [x1, y2]])
if len(box2) == 2:
x1, y1 = box2[0]
x2, y2 = box2[1]
box2 = np.array([[x1, y1], [x2, y1], [x2, y2], [x1, y2]])
if any(cv2.contourArea(np.int32(box)[:, np.newaxis, :]) == 0 for box in [box1, box2]):
warnings.warn('A box with zero area was detected.')
return 0
pc = pyclipper.Pyclipper()
pc.AddPath(np.int32(box1), pyclipper.PT_SUBJECT, closed=True)
pc.AddPath(np.int32(box2), pyclipper.PT_CLIP, closed=True)
intersection_solutions = pc.Execute(pyclipper.CT_INTERSECTION, pyclipper.PFT_EVENODD,
pyclipper.PFT_EVENODD)
union_solutions = pc.Execute(pyclipper.CT_UNION, pyclipper.PFT_EVENODD, pyclipper.PFT_EVENODD)
union = sum(cv2.contourArea(np.int32(points)[:, np.newaxis, :]) for points in union_solutions)
intersection = sum(
cv2.contourArea(np.int32(points)[:, np.newaxis, :]) for points in intersection_solutions)
return intersection / union
示例5: poly_intersect
# 需要导入模块: import pyclipper [as 别名]
# 或者: from pyclipper import Pyclipper [as 别名]
def poly_intersect(subj, clip):
"""
"""
pc = pyclipper.Pyclipper()
pc.AddPath(clip, pyclipper.PT_CLIP, True)
pc.AddPath(subj, pyclipper.PT_SUBJECT, True)
solution = pc.Execute(
pyclipper.CT_INTERSECTION, pyclipper.PFT_EVENODD, pyclipper.PFT_EVENODD
)
return np.array(solution)
示例6: clipPolygonWithPolygons
# 需要导入模块: import pyclipper [as 别名]
# 或者: from pyclipper import Pyclipper [as 别名]
def clipPolygonWithPolygons(path, clipPathList):
import pyclipper
pc = pyclipper.Pyclipper()
pc.AddPath(path, pyclipper.PT_SUBJECT, True)
for clipPath in clipPathList: pc.AddPath(clipPath, pyclipper.PT_CLIP, True)
return pc.Execute(pyclipper.CT_DIFFERENCE)
示例7: unionPolygons
# 需要导入模块: import pyclipper [as 别名]
# 或者: from pyclipper import Pyclipper [as 别名]
def unionPolygons(pathList):
import pyclipper
pc = pyclipper.Pyclipper()
for path in pathList: pc.AddPath(path, pyclipper.PT_SUBJECT, True)
return pc.Execute(pyclipper.CT_UNION, pyclipper.PFT_NONZERO)
示例8: clip_poly_pair
# 需要导入模块: import pyclipper [as 别名]
# 或者: from pyclipper import Pyclipper [as 别名]
def clip_poly_pair(pc, p, q):
""""
pc: an instance of pyclipper.Pyclipper.
p: the polygon by which to clip other polygon q.
pc and p may be held fixed through use of functools.partial so that
multiple q may be clipped by p.
"""
pc.Clear()
pc.AddPath(q, pyclipper.PT_SUBJECT, True)
pc.AddPath(p, pyclipper.PT_CLIP, True)
clip_polys = pc.Execute(clip_type=pyclipper.CT_INTERSECTION)
return clip_polys
示例9: clip_polys_by_one_poly
# 需要导入模块: import pyclipper [as 别名]
# 或者: from pyclipper import Pyclipper [as 别名]
def clip_polys_by_one_poly(polys, p, scale=True):
""" polys: a list of polygons
p: the polygon with which to clip polys
scale: convert floating point polygon coordinates to ints required
by the underlying clipper library.
Returns results, sub_poly_count
results: all polygons that were part of p but were chopped by the
other polys
sub_poly_count: how many sub-polygons were found for each
poly in polys. Can be used with np.repeat to replicate a
list of values associated with each original poly in polys.
"""
pc = pyclipper.Pyclipper()
if scale:
polys = scale_to_clipper(polys)
p = scale_to_clipper(p)
# Changing from the above to the below seems to move most of
# time consumption to within the AddPath calls, i.e., it's not
# the float->int that is expensive, but rather the type conversion
# from Python.
# scale_fact = 2 ** 31
# polys = (polys * scale_fact).astype('int64')
# p = (p*scale_fact).astype('int64')
# Each individual sub-poly is stored here.
# For any polygon p, zero, one or more than one polygon may be returned
# for each poly in polys (depending on overlap and the complexity of p).
# Keep track of how many sub-polygons were found for each poly in polys
cpp = partial(clip_poly_pair, pc, p)
all_clip_polys = map(cpp, polys)
if scale:
sfc = scale_from_clipper #partial(scale_from_clipper, scale=scale_fact)
all_clip_polys = map(sfc, all_clip_polys)
all_clip_polys = list(map(list, all_clip_polys))
sub_polys_per_poly = list(map(len, all_clip_polys))
results = list(itertools.chain.from_iterable(all_clip_polys))
return results, sub_polys_per_poly