如何使用 NumPy 提高像素数学速度
How to increase pixel math speed using NumPy
我正在寻求有关如何提高此计算速度的帮助。我想要做的是访问每个像素并对其进行一些数学计算,然后使用新的像素计算创建一个新图像。我 运行 花了 1 小时以上的时间通过几千张小图片完成了这项工作。如有任何帮助,我们将不胜感激。
image=cv2.imread('image.png')
height, width, depth = image.shape
for i in range(0, height):
for j in range (0, width):
B = float(image.item(i,j,0)) #blue channel of image
R=float(image.item(i,j,2)) #red channel of image
num = R-B
den = R+B
if den == 0:
NEW=1
else:
NEW = ((num/den)*255.0)
NEW = min(NEW,255.0)
NEW = max(NEW,0.0)
image[i,j] = NEW #Sets all BGR channels to NEW value
cv2.imwrite('newImage.png',image)
删除双 for-loop
。使用 NumPy 加速的关键是一次对整个数组进行操作:
image = cv2.imread('image.png')
height, width, depth = image.shape
image = image.astype('float')
B, G, R = image[:, :, 0], image[:, :, 1], image[:, :, 2]
num = R - B
den = R + B
image = np.where(den == 0, 1, (num/den)*255.0).clip(0.0, 255.0)
cv2.imwrite('newImage.png',image)
通过对整个数组调用 NumPy 函数(而不是对标量像素值执行 Python 操作),您可以将大部分计算工作卸载到快速 C/C++/Cython(或Fortran) 由 NumPy 函数调用的编译代码。
我正在寻求有关如何提高此计算速度的帮助。我想要做的是访问每个像素并对其进行一些数学计算,然后使用新的像素计算创建一个新图像。我 运行 花了 1 小时以上的时间通过几千张小图片完成了这项工作。如有任何帮助,我们将不胜感激。
image=cv2.imread('image.png')
height, width, depth = image.shape
for i in range(0, height):
for j in range (0, width):
B = float(image.item(i,j,0)) #blue channel of image
R=float(image.item(i,j,2)) #red channel of image
num = R-B
den = R+B
if den == 0:
NEW=1
else:
NEW = ((num/den)*255.0)
NEW = min(NEW,255.0)
NEW = max(NEW,0.0)
image[i,j] = NEW #Sets all BGR channels to NEW value
cv2.imwrite('newImage.png',image)
删除双 for-loop
。使用 NumPy 加速的关键是一次对整个数组进行操作:
image = cv2.imread('image.png')
height, width, depth = image.shape
image = image.astype('float')
B, G, R = image[:, :, 0], image[:, :, 1], image[:, :, 2]
num = R - B
den = R + B
image = np.where(den == 0, 1, (num/den)*255.0).clip(0.0, 255.0)
cv2.imwrite('newImage.png',image)
通过对整个数组调用 NumPy 函数(而不是对标量像素值执行 Python 操作),您可以将大部分计算工作卸载到快速 C/C++/Cython(或Fortran) 由 NumPy 函数调用的编译代码。