2017-08-05 93 views
1

我有一个从视频流中捕获的图像的大型数据集,我想从中提取一个规范化的数据集。例如,数据集可能包含60%的背景,20%的背景以及20%的非常暗的图像。在python/opencv中找到规范化的图像熊猫

作为一个天真的原型,我想要计算每个图像的平均RGB和bin相似的RGB值,并从每个bin中取一个随机样本。

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() 

未必是最有效的,但它能够完成任务。