处理文件(图像)集合并绘制直方图

时间:2018-01-18 13:03:53

标签: python numpy matplotlib

我正在研究我的项目。到目前为止,我一直在做一些关于初始图像处理的东西。就像我有500张图片一样,用固定的相机拍摄。但其中一些是完全黑暗或太亮。我应该删除它们以获得有价值的图像,然后我可以做进一步的研究。

为了实现它,我应该得到整个500幅图像的强度平均值(R + G + B / 3)。然后绘制直方图。这意味着我必须具有每张图片的平均强度,并将其绘制为直方图。可能,我应该使用for循环来分析500张图像。

到目前为止,这是我的代码。

img = cv2.imread('IMAG0001.JPG')
avg_color_per_row = numpy.average(img, axis=0)
avg_color = numpy.average(avg_color_per_row, axis=0)
print sum(avg_color)/3

可能只是一张图像的强度平均值,但是如果我想分析文件夹中的500张图像并将其绘制成直方图,我该怎么做?

1 个答案:

答案 0 :(得分:2)

你走在正确的道路上。

500张图片不是很多文件。因此,在此代码中实现的第一件事是for循环遍历所有500个图像,读取它们,获取所需信息并存储它。查找os库,您可以在其中循环显示图像文件(位于指定目录中),然后使用matplotlib使用包含所有内容的numpy数组绘制for循环外的直方图您通过循环收集的avg_color数据。解决方案的草案将是这样的:

import os
import numpy as np
import matplotlib.pyplot as plt

results = [] 
for dirpath, dirnames, filenames in os.walk("."):
    for filename in [f for f in filenames if f.endswith('.JPG')]: # to loop over all images you have on the diresctory
        img = cv2.imread(filename)
        avg_color_per_row = numpy.average(img, axis=0)
        avg_color = numpy.average(avg_color_per_row, axis=0)
        results.append(avg_color)
np_results = np.array(results) # to make results a numpy array
plt.hist(np_results)
plt.show() # to show the histogram

我希望能帮助您获得所需的解决方案!