【发布时间】:2017-07-17 13:51:02
【问题描述】:
我正在用 python 编写一个程序,该程序使用的函数与 openCV 中的 addWeighted 函数非常相似。不同之处在于它实际上并没有添加表示图像的 numpy 数组,而是采用在任何特定坐标处更亮的像素并使用该值。
然而,我发现,尽管这些函数做的事情非常相似,但addWeighted 函数要快得多。所以我的问题是,我怎样才能修改我当前的解决方案以同样快?有没有办法可以使用multiprocessing 模块或类似的东西?
代码如下:
image = np.zeros(image_1.shape)
for row_index, row in enumerate(image_1):
for col_index, col in enumerate(row):
pixel_1 = image_1[row_index, col_index]
pixel_2 = image_2[row_index, col_index]
sum_1 = int(pixel_1[0]) + int(pixel_1[1]) + int(pixel_1[2])
sum_2 = int(pixel_2[0]) + int(pixel_2[1]) + int(pixel_2[2])
if sum_2 > sum_1:
image[row_index, col_index] = pixel_2
else:
image[row_index, col_index] = pixel_1
其中image_1 和image_2 都是表示图像的numpy 数组,两者具有相同的形状(720, 1280, 3)。
【问题讨论】:
-
故事的寓意:当你有 numpy 时不要循环像素,除非没有其他选择。几乎总是有一种更快的方法。与 C 之类的语言相比,Python 中的循环速度较慢。Numpy 是用 C 和 Fortran 构建的,因此它会在内部使用这些快速操作,而标准的 Python 循环会慢得多。
标签: python opencv numpy image-processing