本文整理匯總了Python中skimage.draw.polygon方法的典型用法代碼示例。如果您正苦於以下問題:Python draw.polygon方法的具體用法?Python draw.polygon怎麽用?Python draw.polygon使用的例子?那麽恭喜您, 這裏精選的方法代碼示例或許可以為您提供幫助。您也可以進一步了解該方法所在模塊skimage.draw的用法示例。
在下文中一共展示了draw.polygon方法的26個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於我們的係統推薦出更棒的Python代碼示例。
示例1: annToRLE
點讚 6
# 需要導入模塊: from skimage import draw [as 別名]
# 或者: from skimage.draw import polygon [as 別名]
def annToRLE(self, ann):
"""
Convert annotation which can be polygons, uncompressed RLE to RLE.
:return: binary mask (numpy 2D array)
"""
t = self.imgs[ann['image_id']]
h, w = t['height'], t['width']
segm = ann['segmentation']
if type(segm) == list:
# polygon -- a single object might consist of multiple parts
# we merge all parts into one mask rle code
rles = mask.frPyObjects(segm, h, w)
rle = mask.merge(rles)
elif type(segm['counts']) == list:
# uncompressed RLE
rle = mask.frPyObjects(segm, h, w)
else:
# rle
rle = ann['segmentation']
return rle
開發者ID:tonysy,項目名稱:Deep-Feature-Flow-Segmentation,代碼行數:22,
示例2: rectangle
點讚 6
# 需要導入模塊: from skimage import draw [as 別名]
# 或者: from skimage.draw import polygon [as 別名]
def rectangle(size = (4,2), layer = 0):
"""Generate rectangle geometry.
Parameters
----------
size : tuple
Width and height of rectangle.
layer : int, array-like[2], or set
Specific layer(s) to put polygon geometry on.
Returns
-------
A Device with a single rectangle in it
"""
D = Device(name = 'rectangle')
points = [[size[0], size[1]], [size[0], 0], [0, 0], [0, size[1]]]
D.add_polygon(points, layer = layer)
return D
開發者ID:amccaugh,項目名稱:phidl,代碼行數:21,
示例3: bbox
點讚 6
# 需要導入模塊: from skimage import draw [as 別名]
# 或者: from skimage.draw import polygon [as 別名]
def bbox(bbox = [(-1,-1),(3,4)], layer = 0):
""" Creates a bounding box rectangle from coordinates, to allow
creation of a rectangle bounding box directly form another shape.
Parameters
----------
bbox : list of tuples
Coordinates of the box [(x1,y1),(x2,y2)].
layer : int, array-like[2], or set
Specific layer(s) to put polygon geometry on.
Returns
-------
A Device with a single rectangle in it
Examples
--------
>>> D = pg.bbox(anothershape.bbox)
"""
D = Device(name = 'bbox')
(a,b),(c,d) = bbox
points = ((a,b), (c,b), (c,d), (a,d))
D.add_polygon(points, layer = layer)
return D
開發者ID:amccaugh,項目名稱:phidl,代碼行數:27,
示例4: cross
點讚 6
# 需要導入模塊: from skimage import draw [as 別名]
# 或者: from skimage.draw import polygon [as 別名]
def cross(length = 10, width = 3, layer = 0):
"""Generates a right-angle cross (+ shape, symmetric) from two
rectangles of specified length and width.
Parameters
----------
length : float
Length of the cross from one end to the other.
width : float
Width of the arms of the cross.
layer : int, array-like[2], or set
Specific layer(s) to put polygon geometry on.
Returns
-------
A Device with a cross in it
"""
D = Device(name = 'cross')
R = rectangle(size = (width, length), layer = layer)
r1 = D.add_ref(R).rotate(90)
r2 = D.add_ref(R)
r1.center = (0,0)
r2.center = (0,0)
return D
開發者ID:amccaugh,項目名稱:phidl,代碼行數:27,
示例5: circle
點讚 6
# 需要導入模塊: from skimage import draw [as 別名]
# 或者: from skimage.draw import polygon [as 別名]
def circle(radius = 10, angle_resolution = 2.5, layer = 0):
"""Generate a circle geometry.
Parameters
----------
radius : float
Radius of the circle.
angle_resolution : float
Resolution of the curve of the ring (# of degrees per point).
layer : int, array-like[2], or set
Specific layer(s) to put polygon geometry on.
Returns
-------
A Device with an circle polygon in it
"""
D = Device(name = 'circle')
t = np.linspace(0, 360, int(np.ceil(360/angle_resolution) + 1))*pi/180
xpts = (radius*cos(t)).tolist()
ypts = (radius*sin(t)).tolist()
D.add_polygon(points = (xpts,ypts), layer = layer)
return D
開發者ID:amccaugh,項目名稱:phidl,代碼行數:26,
示例6: straight
點讚 6
# 需要導入模塊: from skimage import draw [as 別名]
# 或者: from skimage.draw import polygon [as 別名]
def straight(size = (4,2), layer = 0):
"""Generates a rectangular wire geometry with ports on the length edges.
Parameters
----------
size : tuple
The length and width of the rectangle.
layer : int, array-like[2], or set
Specific layer(s) to put polygon geometry on.
Returns
-------
A Device with an rectangle polygon in it, and two ports (`1` and `2`) on either end
Notes
-----
Ports are included on both sides of the length edge (i.e. size[0]) of the geometry.
"""
D = Device(name = 'wire')
points = [[size[0], size[1]], [size[0], 0], [0, 0], [0, size[1]]]
D.add_polygon(points, layer = layer)
D.add_port(name = 1, midpoint = (size[0]/2, size[1]), width = size[0], orientation = 90)
D.add_port(name = 2, midpoint = (size[0]/2, 0), width = size[0], orientation = -90)
return D
開發者ID:amccaugh,項目名稱:phidl,代碼行數:27,
示例7: cutout
點讚 6
# 需要導入模塊: from skimage import draw [as 別名]
# 或者: from skimage.draw import polygon [as 別名]
def cutout(pageimg, coordstring, scale=1, rect=False):
coords = [p.split(",") for p in coordstring.split()]
coords = np.array([(int(scale * int(c[1])), int(scale * int(c[0])))
for c in coords])
if rect:
return pageimg[min(c[0] for c in coords):max(c[0] for c in coords),
min(c[1] for c in coords):max(c[1] for c in coords)]
rr, cc = polygon(coords[:, 0], coords[:, 1], pageimg.shape)
offset = (min([x[0] for x in coords]), min([x[1] for x in coords]))
box = np.ones(
(max([x[0] for x in coords]) - offset[0],
max([x[1] for x in coords]) - offset[1],
) + ((pageimg.shape[-1],) if len(pageimg.shape) == 3 else ()),
dtype=pageimg.dtype) * 255
box[rr - offset[0], cc - offset[1]] = pageimg[rr, cc]
return box
開發者ID:Calamari-OCR,項目名稱:calamari,代碼行數:18,
示例8: __init__
點讚 6
# 需要導入模塊: from skimage import draw [as 別名]
# 或者: from skimage.draw import polygon [as 別名]
def __init__(self, path, size=(226, 226), transform=lambda x: x):
self.transform = transform
with Image.open(path + ".tif") as stack:
frames = []
for img in ImageSequence.Iterator(stack):
frame = torch.tensor(np.array(img).astype(float))
frames.append(frame.unsqueeze(0))
self.raw_image = torch.cat(frames, dim=0)
rois = read_roi_zip(path + ".roi.zip")
self.rois = [
torch.tensor(zip(*polygon(
roi[1]["x"], roi[1]["y"],
shape=(self.raw_image.size(1),
self.raw_image.size(2))
)), dtype=torch.long)
for roi in rois
]
開發者ID:mjendrusch,項目名稱:torchsupport,代碼行數:19,
示例9: area_of_intersection
點讚 6
# 需要導入模塊: from skimage import draw [as 別名]
# 或者: from skimage.draw import polygon [as 別名]
def area_of_intersection(det_x, det_y, gt_x, gt_y):
"""
This helper calculates the area of intersection.
"""
if approx_area_of_intersection(det_x, det_y, gt_x, gt_y) > 1: #only proceed if it passes the approximation test
ymax = np.maximum(np.max(det_y), np.max(gt_y)) + 1
xmax = np.maximum(np.max(det_x), np.max(gt_x)) + 1
bin_mask = np.zeros((ymax, xmax))
det_bin_mask = np.zeros_like(bin_mask)
gt_bin_mask = np.zeros_like(bin_mask)
rr, cc = polygon(det_y, det_x)
det_bin_mask[rr, cc] = 1
rr, cc = polygon(gt_y, gt_x)
gt_bin_mask[rr, cc] = 1
final_bin_mask = det_bin_mask + gt_bin_mask
inter_map = np.where(final_bin_mask == 2, 1, 0)
inter = np.sum(inter_map)
return inter
# return np.round(inter, 2)
else:
return 0
開發者ID:clw5180,項目名稱:remote_sensing_object_detection_2019,代碼行數:27,
示例10: coord2_img
點讚 6
# 需要導入模塊: from skimage import draw [as 別名]
# 或者: from skimage.draw import polygon [as 別名]
def coord2_img(mean_x, mean_y, length, aspect_ratio, rotate, img_size):
W2 = np.array([[np.cos(rotate), np.sin(rotate)], [-np.sin(rotate), np.cos(rotate)]])
height = length
width = height / aspect_ratio
c = np.array([[-height/2, -width/2], [height/2, -width/2], [height/2, width/2], [-height/2, width/2]])
c = (W2 @ c.T).T + np.array([mean_y, mean_x])
img = np.zeros((img_size, img_size), dtype=np.uint8)
rr, cc = polygon(c[:, 0], c[:, 1])
index = (rr >= 0) * (rr < img_size) * (cc >= 0) * (cc < img_size)
img[rr[index], cc[index]] = 255
return img
開發者ID:toshi-k,項目名稱:kaggle-airbus-ship-detection-challenge,代碼行數:19,
示例11: iou
點讚 6
# 需要導入模塊: from skimage import draw [as 別名]
# 或者: from skimage.draw import polygon [as 別名]
def iou(self, bb, angle_threshold=np.pi/6):
if abs(self.angle - bb.angle) % np.pi > angle_threshold:
return 0
rr1, cc1 = self.polygon_coords()
rr2, cc2 = polygon(bb.points[:, 0], bb.points[:, 1])
try:
r_max = max(rr1.max(), rr2.max()) + 1
c_max = max(cc1.max(), cc2.max()) + 1
except:
return 0
canvas = np.zeros((r_max, c_max))
canvas[rr1, cc1] += 1
canvas[rr2, cc2] += 1
union = np.sum(canvas > 0)
if union == 0:
return 0
intersection = np.sum(canvas == 2)
return intersection/union
開發者ID:dougsm,項目名稱:mvp_grasp,代碼行數:23,
示例12: get_labels
點讚 6
# 需要導入模塊: from skimage import draw [as 別名]
# 或者: from skimage.draw import polygon [as 別名]
def get_labels(contours, shape, slices):
z = [np.around(s.ImagePositionPatient[2], 1) for s in slices]
pos_r = slices[0].ImagePositionPatient[1]
spacing_r = slices[0].PixelSpacing[1]
pos_c = slices[0].ImagePositionPatient[0]
spacing_c = slices[0].PixelSpacing[0]
label_map = np.zeros(shape, dtype=np.float32)
for con in contours:
num = ROI_ORDER.index(con['name']) + 1
for c in con['contours']:
nodes = np.array(c).reshape((-1, 3))
assert np.amax(np.abs(np.diff(nodes[:, 2]))) == 0
z_index = z.index(np.around(nodes[0, 2], 1))
r = (nodes[:, 1] - pos_r) / spacing_r
c = (nodes[:, 0] - pos_c) / spacing_c
rr, cc = polygon(r, c)
label_map[z_index, rr, cc] = num
return label_map
開發者ID:xf4j,項目名稱:aapm_thoracic_challenge,代碼行數:22,
示例13: scale_regions
點讚 6
# 需要導入模塊: from skimage import draw [as 別名]
# 或者: from skimage.draw import polygon [as 別名]
def scale_regions(regions: Sequence[Tuple[List, List]],
scale: Union[float, Tuple[float, float]]) -> Sequence[Tuple[List, List]]:
"""
Scales baselines/polygon coordinates by a certain factor.
Args:
lines (Sequence): List of tuples containing the baseline and it's
polygonization.
scale (float or tuple of floats): Scaling factor
"""
if isinstance(scale, float):
scale = (scale, scale)
scaled_regions = []
for region in regions:
scaled_regions.append((np.array(region) * scale).astype('uint').tolist())
return scaled_regions
開發者ID:mittagessen,項目名稱:kraken,代碼行數:18,
示例14: scale_polygonal_lines
點讚 6
# 需要導入模塊: from skimage import draw [as 別名]
# 或者: from skimage.draw import polygon [as 別名]
def scale_polygonal_lines(lines: Sequence[Tuple[List, List]], scale: Union[float, Tuple[float, float]]) -> Sequence[Tuple[List, List]]:
"""
Scales baselines/polygon coordinates by a certain factor.
Args:
lines (Sequence): List of tuples containing the baseline and it's
polygonization.
scale (float or tuple of floats): Scaling factor
"""
if isinstance(scale, float):
scale = (scale, scale)
scaled_lines = []
for line in lines:
bl, pl = line
scaled_lines.append(((np.array(bl) * scale).astype('int').tolist(),
(np.array(pl) * scale).astype('int').tolist()))
return scaled_lines
開發者ID:mittagessen,項目名稱:kraken,代碼行數:19,
示例15: _test_intersect
點讚 6
# 需要導入模塊: from skimage import draw [as 別名]
# 或者: from skimage.draw import polygon [as 別名]
def _test_intersect(bp, uv, bs):
"""
Returns the intersection points of a ray with direction `uv` from
`bp` with a polygon `bs`.
"""
u = bp - np.roll(bs, 2)
v = bs - np.roll(bs, 2)
points = []
for dir in ((1,-1), (-1,1)):
w = (uv * dir * (1,-1))[::-1]
z = np.dot(v, w)
t1 = np.cross(v, u) / z
t2 = np.dot(u, w) / z
t1 = t1[np.logical_and(t2 >= 0.0, t2 <= 1.0)]
points.extend(bp + (t1[np.where(t1 >= 0)[0].min()] * (uv * dir)))
return np.array(points)
開發者ID:mittagessen,項目名稱:kraken,代碼行數:18,
示例16: test_ray_features_polygon
點讚 6
# 需要導入模塊: from skimage import draw [as 別名]
# 或者: from skimage.draw import polygon [as 別名]
def test_ray_features_polygon(self):
seg = np.ones((400, 600), dtype=bool)
x, y = draw.polygon(np.array([50, 170, 300, 250, 150, 150, 50]),
np.array([100, 270, 240, 150, 150, 80, 50]),
shape=seg.shape)
seg[x, y] = False
centres = [(150, 200), (200, 250), (250, 200), (120, 100)]
for i, point in enumerate(centres):
ray_dist_raw = compute_ray_features_segm_2d(seg, point,
angle_step=ANGULAR_STEP)
ray_dist, shift = shift_ray_features(ray_dist_raw)
points = reconstruct_ray_features_2d(point, ray_dist, shift)
p_fig = export_ray_results(seg, point, points, ray_dist_raw, ray_dist,
'polygon-%i.png' % i)
self.assertTrue(os.path.exists(p_fig))
開發者ID:Borda,項目名稱:pyImSegm,代碼行數:18,
示例17: segToMask
點讚 5
# 需要導入模塊: from skimage import draw [as 別名]
# 或者: from skimage.draw import polygon [as 別名]
def segToMask( S, h, w ):
"""
Convert polygon segmentation to binary mask.
:param S (float array) : polygon segmentation mask
:param h (int) : target mask height
:param w (int) : target mask width
:return: M (bool 2D array) : binary mask
"""
M = np.zeros((h,w), dtype=np.bool)
for s in S:
N = len(s)
rr, cc = polygon(np.array(s[1:N:2]).clip(max=h-1), \
np.array(s[0:N:2]).clip(max=w-1)) # (y, x)
M[rr, cc] = 1
return M
開發者ID:tonysy,項目名稱:Deep-Feature-Flow-Segmentation,代碼行數:17,
示例18: segToMask
點讚 5
# 需要導入模塊: from skimage import draw [as 別名]
# 或者: from skimage.draw import polygon [as 別名]
def segToMask( S, h, w ):
"""
Convert polygon segmentation to binary mask.
:param S (float array) : polygon segmentation mask
:param h (int) : target mask height
:param w (int) : target mask width
:return: M (bool 2D array) : binary mask
"""
M = np.zeros((h,w), dtype=np.bool)
for s in S:
N = len(s)
rr, cc = polygon(np.array(s[1:N:2]).clip(max=h-1), \
np.array(s[0:N:2]).clip(max=w-1)) # (y, x)
M[rr, cc] = 1
return M
開發者ID:tonysy,項目名稱:Deep-Feature-Flow-Segmentation,代碼行數:17,
示例19: mask_coco2voc
點讚 5
# 需要導入模塊: from skimage import draw [as 別名]
# 或者: from skimage.draw import polygon [as 別名]
def mask_coco2voc(coco_masks, im_height, im_width):
voc_masks = np.zeros((len(coco_masks), im_height, im_width))
for i, ann in enumerate(coco_masks):
if type(ann) == list:
# polygon
m = segToMask(ann, im_height, im_width)
else:
# rle
m = decodeMask(ann)
voc_masks[i,:,:]=m;
return voc_masks
開發者ID:tonysy,項目名稱:Deep-Feature-Flow-Segmentation,代碼行數:13,
示例20: ellipse
點讚 5
# 需要導入模塊: from skimage import draw [as 別名]
# 或者: from skimage.draw import polygon [as 別名]
def ellipse(radii = (10,5), angle_resolution = 2.5, layer = 0):
"""Generate an ellipse geometry.
Parameters
----------
radii : tuple
Semimajor (x) and semiminor (y) axis lengths of the ellipse.
angle_resolution : float
Resolution of the curve of the ring (# of degrees per point).
layer : int, array-like[2], or set
Specific layer(s) to put polygon geometry on.
Returns
-------
A Device with an ellipse polygon in it
"""
D = Device(name = 'ellipse')
a = radii[0]
b = radii[1]
t = np.linspace(0, 360, int(np.ceil(360/angle_resolution) + 1))*pi/180
r = a*b/(sqrt((b*cos(t))**2 + (a*sin(t))**2))
xpts = r*cos(t)
ypts = r*sin(t)
D.add_polygon(points = (xpts,ypts), layer = layer)
return D
開發者ID:amccaugh,項目名稱:phidl,代碼行數:28,
示例21: L
點讚 5
# 需要導入模塊: from skimage import draw [as 別名]
# 或者: from skimage.draw import polygon [as 別名]
def L(width = 1, size = (10,20) , layer = 0):
"""Generates an "L" geometry with ports on both ends.
Parameters
----------
width : float
Width of the L.
size : tuple
Lengths of the base and height of the L, respectively.
layer : int, array-like[2], or set
Specific layer(s) to put polygon geometry on.
Returns
-------
A Device with an L-shaped polygon in it, and two ports (`1` and `2`) on
either end of the L
"""
D = Device(name = 'L')
w = width/2
s1, s2 = size
points = [(-w,-w), (s1,-w), (s1,w), (w,w), (w,s2), (-w,s2), (-w,-w)]
D.add_polygon(points, layer = layer)
D.add_port(name = 1, midpoint = (0,s2), width = width, orientation = 90)
D.add_port(name = 2, midpoint = (s1, 0), width = width, orientation = 0)
return D
開發者ID:amccaugh,項目名稱:phidl,代碼行數:28,
示例22: C
點讚 5
# 需要導入模塊: from skimage import draw [as 別名]
# 或者: from skimage.draw import polygon [as 別名]
def C(width = 1, size = (10,20) , layer = 0):
"""Generates a "C" geometry with ports on both ends.
Parameters
----------
width : float
Width of the C.
size : tuple
Lengths of the base + top edges and the height of the C, respectively.
layer : int, array-like[2], or set
Specific layer(s) to put polygon geometry on.
Returns
-------
A Device with an [-bracket-shaped polygon in it, and two ports (`1` and `2`) on
either end of the [ shape
"""
D = Device(name = 'C')
w = width/2
s1, s2 = size
points = [(-w,-w), (s1,-w), (s1,w), (w,w), (w,s2-w), (s1,s2-w), (s1,s2+w), (-w, s2+w), (-w,-w)]
D.add_polygon(points, layer = layer)
D.add_port(name = 1, midpoint = (s1,s2), width = width, orientation = 0)
D.add_port(name = 2, midpoint = (s1, 0), width = width, orientation = 0)
return D
#==============================================================================
#
# Boolean functions
#
#==============================================================================
開發者ID:amccaugh,項目名稱:phidl,代碼行數:36,
示例23: offset
點讚 5
# 需要導入模塊: from skimage import draw [as 別名]
# 或者: from skimage.draw import polygon [as 別名]
def offset(elements, distance = 0.1, join_first = True, precision = 1e-4,
num_divisions = [1,1], join='miter', tolerance=2,
max_points = 4000, layer = 0):
if type(elements) is not list: elements = [elements]
polygons_to_offset = []
for e in elements:
if isinstance(e, (Device, DeviceReference)): polygons_to_offset += e.get_polygons(by_spec = False)
elif isinstance(e, (Polygon, gdspy.Polygon)): polygons_to_offset.append(e)
if len(polygons_to_offset) == 0:
return Device('offset')
polygons_to_offset = _merge_floating_point_errors(polygons_to_offset, tol = precision/1000)
gds_layer, gds_datatype = _parse_layer(layer)
if all(np.array(num_divisions) == np.array([1,1])):
p = gdspy.offset(polygons_to_offset, distance = distance, join=join, tolerance=tolerance,
precision=precision, join_first=join_first,
max_points=max_points, layer=gds_layer, datatype = gds_datatype)
else:
p = _offset_polygons_parallel(
polygons_to_offset,
distance = distance,
num_divisions = num_divisions,
join_first = join_first,
precision = precision,
join = join,
tolerance = tolerance,
)
D = Device('offset')
polygons = D.add_polygon(p, layer=layer)
[polygon.fracture(max_points = max_points, precision = precision) for polygon in polygons]
return D
開發者ID:amccaugh,項目名稱:phidl,代碼行數:33,
示例24: _crop_region
點讚 5
# 需要導入模塊: from skimage import draw [as 別名]
# 或者: from skimage.draw import polygon [as 別名]
def _crop_region(polygons, left, bottom, right, top, precision):
""" Given a rectangular boundary defined by left/bottom/right/top, this
takes a list of polygons and cuts them at the boundary, discarding parts
of the polygons outside the rectangle. """
cropped_polygons = []
for p in polygons:
clipped_polys = clipper._chop(p, [top, bottom], 1, 1 / precision) # polygon, [cuts], axis, scale
for cp in clipped_polys[1]:
result = clipper._chop(cp, [left, right], 0, 1 / precision)
cropped_polygons += list(result[1])
return cropped_polygons
開發者ID:amccaugh,項目名稱:phidl,代碼行數:13,
示例25: _find_bboxes_in_rect
點讚 5
# 需要導入模塊: from skimage import draw [as 別名]
# 或者: from skimage.draw import polygon [as 別名]
def _find_bboxes_in_rect(bboxes, left, bottom, right, top):
""" Given a list of polygon bounding boxes and a rectangle defined by
left/bottom/right/top, this function returns those polygons which overlap
the rectangle. """
result = (bboxes[:,0] <= right) & (bboxes[:,2] >= left) & \
(bboxes[:,1] <= top) & (bboxes[:,3] >= bottom)
return result
# _find_bboxes_on_rect_edge
開發者ID:amccaugh,項目名稱:phidl,代碼行數:11,
示例26: _find_bboxes_on_rect_edge
點讚 5
# 需要導入模塊: from skimage import draw [as 別名]
# 或者: from skimage.draw import polygon [as 別名]
def _find_bboxes_on_rect_edge(bboxes, left, bottom, right, top):
""" Given a list of polygon bounding boxes and a rectangular boundary defined by
left/bottom/right/top, this function returns those polygons which intersect
the rectangular boundary. """
bboxes_left = _find_bboxes_in_rect(bboxes, left, bottom, left, top)
bboxes_right = _find_bboxes_in_rect(bboxes, right, bottom, right, top)
bboxes_top = _find_bboxes_in_rect(bboxes, left, top, right, top)
bboxes_bottom = _find_bboxes_in_rect(bboxes, left, bottom, right, bottom)
result = bboxes_left | bboxes_right | bboxes_top | bboxes_bottom
return result
開發者ID:amccaugh,項目名稱:phidl,代碼行數:12,
注:本文中的skimage.draw.polygon方法示例整理自Github/MSDocs等源碼及文檔管理平台,相關代碼片段篩選自各路編程大神貢獻的開源項目,源碼版權歸原作者所有,傳播和使用請參考對應項目的License;未經允許,請勿轉載。