资源简介

代码用于产生任意形状的封闭图形并将封闭区域内进行赋值

资源截图

代码片段和文件信息

#  coding  --utf8

from matplotlib.path import Path
import matplotlib.patches as patches
import matplotlib.pyplot as plt
import numpy as np
import cv2
import os
import scipy.ndimage
def draw_random_shape(savenamen=8r=0.7):
    ‘‘‘
    TODO:绘制不同形状的图,n和r控制了形状的复杂程度,其中n控制复杂的边长数目,r控制每一个边长的复杂程度
    :param n: 变异的边长数目
    :param r: 对于圆的扰动程度
    :return:
    ‘‘‘

    N = n*3 +1 # 图像的角点数目

    angles = np.linspace(02*np.piN)
    codes = np.full(NPath.CURVE4)
    codes[0] = Path.MOVETO

    verts = np.stack((np.cos(angles)np.sin(angles))).T*(2*r*np.random.random(N)+1-r)[:None]
    verts[-1:] = verts[0:]
    path = Path(vertscodes)
    fig = plt.figure()
    ax = fig.add_subplot(111)
    path = patches.PathPatch(pathfacecolor=‘none‘lw=1)
    ax.add_patch(path)
    ax.set_xlim(np.min(verts) * 1.1 np.max(verts) * 1.1)
    ax.set_ylim(np.min(verts) * 1.1 np.max(verts) * 1.1)
    ax.axis(‘off‘)
    plt.savefig(savename)
    mask = cv2.imread(savename)
    mask = mask[::0]
    mask = cv2.bitwise_not(mask)        # 将图像反相
    mask = cv2.Canny(mask0255)        # 使用canny算子将边缘值全部二值化为255,这样使用射线法找到
    cv2.imwrite(savenamemask)

def img_resize(imgimg_shape):
    imgnew = cv2.resize(img img_shape interpolation=cv2.INTER_LANCZOS4)
    return imgnew

def random_panning(imgthim

评论

共有 条评论