【发布时间】:2020-07-24 07:27:06
【问题描述】:
目前我正在编写一个代码,我使用 Opencv/PIL 提取图像 RGB 值(两者都尝试过)。 然后我将它们通过一个函数来计算它们的平均值和中位数以及上下部分的平均值和中位数。 目前我的代码每秒大约需要 1 张图像,我需要为 10,000 多张图像执行此操作,这些图像存储在其类别的不同子文件夹中。 我使用 numpy 函数来表示平均值和中位数。
有没有更快的方法可以做到这一点?
编辑:图像大小不同,尺寸从 1x1 到 1000x100 不等,格式为 jpg、png 和 bmp
至于代码,我知道访问图像不会花费很长时间,但问题在于计算这些数组的均值和中值。
我会在它的外观下面添加一个代码 sn-p(如果它看起来很糟糕,我提前道歉)
最后,我还使用 xlwt 将所有这些平均值和中值写入 Excel 表,我希望这也不应该花很长时间。
我使用 os.walk 遍历目录,之后我使用
img = os.path.join(dirName,fname)
并从另一个文件中定义的函数中获取值
值 = rgbavg(img)
image = cv2.imread(image_path)
img = np.array(image)
img = img.transpose(2,0,1).reshape(3,-1)
x, size = img.shape
avg = np.mean(img, axis = 1)
for i in range(0,3):
upper = np.array([])
lower = np.array([])
for ele in img[i]:
if ele > avg[i]:
upper = np.append(upper,ele)
else:
lower = np.append(lower,ele)
if upper.size != 0:
mean = np.mean(upper)
avg = np.append(avg,mean)
else:
avg = np.append(avg,0)
if lower.size != 0:
mean = np.mean(lower)
avg = np.append(avg,mean)
else:
avg = np.append(avg,0)
【问题讨论】:
-
尝试包含代码 sn-ps 显示您当前拥有的解决方案。它将帮助您描述问题的细微差别,并帮助人们为您提供更有用的答案。
-
了解一些格式、像素尺寸和文件大小可能也很有用。如果这些是几百万像素的图像,那么花一秒钟的速度与您预期的一样快。如果它们是 100 像素的缩略图,则可以改进
标签: python image-processing data-mining