【问题标题】:Calculating average raster values using numpy (fast)使用 numpy 计算平均栅格值(快速)
【发布时间】:2018-01-09 00:56:50
【问题描述】:

我有一个 JPEG 图像,我需要尽快计算每个栅格(红色、蓝色和绿色)的平均值。当我尝试使用两个 for 循环来访问每个像素并添加值时,该过程需要很长时间(大约 30 秒)。有没有办法快速计算平均栅格值(可能使用 numpy 和 OpenCV)?我使用的代码如下:

for i in range(width):
        for j in range(height):
            pix = im.getpixel((i,j))
            redValues = redValues + pix[0]
            greenValues = greenValues + pix[1]
            blueValues = blueValues + pix[2]

【问题讨论】:

  • 您能否提供一个最低限度的工作示例来测试您的代码?在尝试使用不同的库进行优化之前,您首先需要确定实际花费最多的时间。我的直觉是im.getpixel((i,j)) 电话,但我不确定。
  • 我会尝试类似:redValues = sum(im[:,:][0]) 但我不确定语法
  • See this discussion - 似乎 PIL 是测试过的最快的库。但是用当前版本测试不同的策略——线程已经很老了。

标签: python numpy opencv


【解决方案1】:
import cv2 

## Read the image into `BGR`: (H,W,3), [[B,G,R],...]
img = cv2.imread("test.png")

## Get shape
H,W = img.shape[:2]

## calculate 
avg = img.reshape(-1,3).sum(axis=0)/(H*W)
print(avg)

【讨论】:

  • opencv 中不存在img.reshape(-1, 3).mean(axis = 0),就像在numpy 中一样?
  • img 是一个numpy.ndarray,由 OpenCV 加载的图像。任何np.ndarray 都可以执行此操作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-11-24
  • 2018-10-22
  • 2021-10-14
  • 1970-01-01
  • 2020-06-11
  • 2018-07-25
  • 2014-11-04
相关资源
最近更新 更多