最近、ラベル ツールを使用してカテゴリをマークするセマンティック セグメンテーション プロジェクトに取り組んでいました。その後、カテゴリごとに異なる色が生成されました。コードが必要な場合は、それらを参照できます。後で、1 つのカテゴリを含む画像と、次のカテゴリを含む画像を数えたいと考えています。画像全体の割合として、以下は私のコードです:
コードのアイデア:
1) フォルダー内の画像を周期的に読み取ります
2) 画像のピクセルがピクセルと一致する場合、画像の各ピクセルを周期的に読み取ります検出した物体の割合に対応するカテゴリに 1 を加えます
3) 画像を読み取った後、各カテゴリの割合を計算します。
import cv2
import os
import matplotlib.pyplot as plt
picture_path="/home/wsb/桌面/picture"
picture_list=os.listdir(picture_path)
total_picture=len(picture_list)
total=total_picture
per=[]
number=0#图片中道路类型为1的个数
number1=0#一种道路类型并且比例小于0.0638的个数
number2=0
for item in picture_list:
src = os.path.join(os.path.abspath(picture_path), item)
print("start: %s "%item)
total_picture-=1
mat=cv2.imread(src)
height=mat.shape[0]
width=mat.shape[1]
ground=0
zero=0
one=0
two=0
three=0
four=0
five=0
six=0
seven=0
eight=0
rateground=0
rate0=0
rate1=0
rate2=0
rate3=0
rate4=0
rate5=0
rate6=0
rate7=0
rate8=0
rate=0
road_type=0
for i in range(height):
for j in range(width):
# print("r:%s"%mat[i][j][0])
# print("r:%s"%mat[i][j][1])
# print("r:%s"%mat[i][j][2])
'''
我这里共有9种分类情况,况且我已知道每一种颜色的具体rgb值,我将它们作为我的判断条件
如不你不知道可以在网上查找自己想查看比例的rgb值或者范围
'''
if mat[i][j][0]==0 and mat[i][j][1]==0 and mat[i][j][2]==0:
ground+=1
elif mat[i][j][0]==128 and mat[i][j][1]==0 and mat[i][j][2]==0:
zero+=1
elif mat[i][j][0]==0 and mat[i][j][1]==128 and mat[i][j][2]==0:
one+=1
elif mat[i][j][0]==128 and mat[i][j][1]==128 and mat[i][j][2]==0:
two+=1
elif mat[i][j][0]==0 and mat[i][j][1]==0 and mat[i][j][2]==128:
three+=1
elif mat[i][j][0]==128 and mat[i][j][1]==0 and mat[i][j][2]==128:
four+=1
elif mat[i][j][0]==0 and mat[i][j][1]==128 and mat[i][j][2]==128:
five+=1
elif mat[i][j][0]==128 and mat[i][j][1]==128 and mat[i][j][2]==128:
six+=1
elif mat[i][j][0]==0 and mat[i][j][1]==0 and mat[i][j][2]==64:
seven+=1
elif mat[i][j][0]==0 and mat[i][j][1]==0 and mat[i][j][2]==192:
eight+=1
else:
print("输入正确的图片,或者更改上面判断条件的像素值")
rateground=ground/(height*width)
rate0=zero/(height*width)
if rate0!=0:
road_type+=1
rate1=one/(height*width)
if rate1!=0:
road_type+=1
rate2=two/(height*width)
if rate2!=0:
road_type+=1
rate3=three/(height*width)
if rate3!=0:
road_type+=1
rate4=four/(height*width)
if rate4!=0:
road_type+=1
rate5=five/(height*width)
if rate5!=0:
road_type+=1
rate6=six/(height*width)
if rate6!=0:
road_type+=1
rate7=seven/(height*width)
if rate7!=0:
road_type+=1
rate8=eight/(height*width)
if rate8!=0:
road_type+=1
rate=rate0+rate1+rate2+rate3+rate4+rate5+rate6+rate7+rate8
per.append(rate)
if road_type==1:
number+=1
if rate<0.0638:
number1+=1#一种类型道路并且所占比例小于0.0638的情况
else:
if rate<0.532:
number2+=1#两种道路类型,并且正确正确道路类型所占比例小于0.532时的个数
print("the remaining %d"%total_picture)
A=number/total#图片中道路类型大于1种的概率
A1=number1/total#图片中一种道路类型并且比例小于0.0638的概率
A2=number2/total#图片中有两种道路,并且一种道路所占比例小于0.532时的概率
print("A1:%s"%A1)
print("the precentage of one road is %s"%A)
print("the precentage of two road is %s"%(1-A))
print("A2:%s"%A2)
plt.plot(per)
plt.ylabel('the percentage of road')
plt.show()