在目标检测中,有时候需要计算 标注好的目标占原图的比例!根据计算的结果,可以用数字很好的说明小目标的占比。
本文所使用的分割图片如下图所示:
注意:使用的分割图片均为单个目标,多个同种目标,且没有其他颜色的边框
利用标注好的分割图,通过记录目标像素个数和背景像素个数,计算
红色像素个数/(黑色像素个数+红色像素个数) 即可得到结果。
计算后的结果如下图所示:
其中:data中保存的是每一张图片中目标所占的比例,
black_data和red_data中分别保存的是每一张图片背景黑色像素和目标红色像素的个数。
使用的代码如下:
import os
from PIL import Image
import numpy as np
'''
将分割图片路径填写到path值中,运行代码即可
'''
path = './image/' #图片路径
dataname = 'data.txt' #存放计算结果
red_data = 'red.txt' #存放红色像素数量
black_data = 'black.txt' #存放黑色像素数量
files = os.listdir(path) #读取图片文件
for file in files: #循环使用
img = Image.open(path+file) #读取图片
img_array = np.array(img) #将图片转换成二进制数组
shape = img_array.shape #得到数组尺寸大小
#print(shape) #图片的尺寸
#print(img_array) #图片数组内容
black = 0
red = 0
for i in range(0,shape[0]): #遍历图片像素
for j in range(0,shape[1]):
value = img_array[ i , j ] #得到像素每一点的值
if value == 0: #图片为二值化图片,黑色为0,红色为1
black += 1 #黑色像素数量
if value == 1:
red += 1 #红色像素数量
#print(black,red)
per_image = red/(black+red) #红色像素占整张图像素比例
print(per_image)
#print("red",red,"black",black)
with open (dataname,'a') as f: #将结果写入txt文档
f.write(str(per_image)+"\n")
with open (red_data ,'a') as f:
f.write(str(red)+"\n")
with open (black_data ,'a') as f:
f.write(str(black)+"\n")