利用目标检测分割图进行目标占比计算

在目标检测中,有时候需要计算   标注好的目标占原图的比例!根据计算的结果,可以用数字很好的说明小目标的占比。

本文所使用的分割图片如下图所示:
94e221f582384d3fa2928a9c5fae3d7d.png

注意:使用的分割图片均为单个目标,多个同种目标,且没有其他颜色的边框

利用标注好的分割图,通过记录目标像素个数和背景像素个数,计算

红色像素个数/(黑色像素个数+红色像素个数)   即可得到结果。

计算后的结果如下图所示:

8a17e3db93ab4bb2af50da7af8ac0cd4.pnga30ebbc47ad540b698254c6d231604bd.pngab6177245a0c4cafa4d8952e07f6f289.png

其中: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")

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值