计算图片中各种颜色的百分比
def cal_percent(image):
'''计算图像各颜色百分比'''
rgb = {}
name = ade20k_labels.ade20K_color2lable #这个是颜色列表,自行创建一个即可
for row in range(image.shape[0]):
for col in range(image.shape[1]):
if (name[tuple(image[row, col])] not in rgb) or (row == 0 and col == 0):
rgb[name[tuple(image[row, col])]] = [1, tuple(image[row, col])]
else:
rgb[name[tuple(image[row, col])]][0] = rgb[name[tuple(image[row, col])]][0] + 1
num = 0
for k in rgb:
num = num + 1
rgb[k][0] = str('{:.4f}%'.format(rgb[k][0] / 9600))
#rgb[k][0] = rgb[k][0] / 9600
print(rgb)
return rgb, num
创建图例,并进行拼接
def write_image(img, write_contents, text_size=10):
'''在图片中写上文字'''
#设置字体(从windows/font中查找自己所需要的字体)
fontpath = 'font/simsun.ttc'#(宋体)
font = ImageFont.truetype(fontpath, text_size) #设置字体为ImageDeaw.draw()服务
if type(img) is np.ndarray:
image = Image.fromarray(img) #array转换成Image(反过来则使用np.array())
else:
image = img
draw = ImageDraw.Draw(image)
#绘制文字信息
draw.text((0,0), write_contents, font=font, fill=(0, 0, 0))
return img
def create_rectangle(shape, color, text, text_size=10):
'''创建正方形'''
rectangle = Image.new('RGB', shape, color)
rectangle = write_image(rectangle, text, text_size)
return rectangle
def legend(image, text_size=10):
''' 创建图例 '''
#计算图像的各颜色百分比
shape = np.array(image).shape
h = int(shape[1] / 10)
print(shape)
rgb, num = cal_percent(np.asarray(image))
print(num)
img = Image.new('RGB', (shape[1], int(num / 10 + 1) * 60), (96, 96, 96)) #第二个参数为(height,width)
img2 = Image.new('RGB', (shape[1], int(num / 10 + 1) * 60 + shape[0]), (255, 255, 255))
print(img2)
#绘制图例
for i, k in enumerate(rgb):
if i % 10 == 0:
count1 = 0
else:
count1 = count1 + 1
text = k + '(' + rgb[k][0] + ')'
rectangle = create_rectangle((h - 20, 30), rgb[k][1], text, text_size)
coordination = (count1 * h, 30 + int(i / 10) * 60) #第二个参数为(height,width)
img.paste(rectangle, coordination)
img2.paste(image, (0, 0))
img2.paste(img, (0, shape[0]))
return img2
代码调用
image = Image.open('此处填写打开文件的路径')
image = legend(image)
imageio.imsave('此处填写保存文件的路径', image)
效果图展示
原始图片:
添加图例后的图片:
版权声明:本文为wuduo294原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。