2017-08-05 8 views
1

私はビデオストリームからキャプチャした画像の大量のデータセットを持っており、それらから正規のデータセットを抽出したいと思います。たとえば、データセットは、背景が60%、人間が20%、背景が20%、非常に暗い画像で構成されています。python/opencv pandasで標準画像を見つける

素朴なプロトタイプとして、私はすべての画像の平均RGBと類似のRGB値を一緒に計算し、各ビンからランダムなサンプルを取ると考えました。

rgb_avg = {} 
for i in img_list: 
    img = cv2.imread(i) 
    rgb_avg[i] = np.mean(img) 
rgb_series = pd.Series(rgb_avg) 
bins = pd.cut(rgb_series,bins=10) 

これはカテゴリのシリーズで私を残し、本当にこのシリーズで動作し、ランダムに各ビンからサンプリングする方法についての良いチュートリアルを見つけることができません。 RGBシリーズを10ビンに分割し、各ビンからファイルをランダムにサンプリングするにはどうすればよいですか?

+0

あなたのコードは短くて明確です。それがうまくいくなら、私はあなた自身の質問に答えたと思います。 –

+0

すばらしいおかげで、私の編集を回答に移しました。 –

答えて

0

私は経由でそれを達成することができました:

rgb_avg = {} 
for i in img_list: 
    img = cv2.imread(i) 
    rgb_avg[i] = np.mean(img) 
rgb_series = pd.Series(rgb_avg) 
bins = pd.cut(rgb_series,bins=10) 
bin_values = sorted([b.right for b in bins.unique()]) 
img_bins = {b : [] for b in bin_values} 
for img,rgb in rgb_avg.items(): 
    for b in bin_values: 
     if rgb <= b: 
      img_bins[b].append(img) 
for b in img_bins: 
    img = np.random.choice(img_bins[b]) 
    plt.imshow(cv2.imread(img)) 
    plt.show() 

は、最も効率的ではないかもしれませんが、それは仕事が行われます。

関連する問題