如何优化代码? (python-opencv-numpy)

时间:2019-03-19 04:27:57

标签: python numpy opencv

import cv2
import numpy as np

img = cv2.imread('/home/user/Vision Artificial/fig_2.png')
tam = np.size(img, 0), np.size(img, 1)
cadena = '[255   0   0]'

for i in range(tam[0]):
    for j in range(tam[1]):
        if(str(img[i, j]) != cadena):
            img[i, j] = [255, 255, 255]

cv2.imwrite('/home/user/Vision Artificial/out.png', img)

cadena包含我要保存的颜色

例如:

input:

fig_2.png

output: 

out.png

1 个答案:

答案 0 :(得分:0)

将整数数组转换为字符串很慢。 而是使用numpy.array_equal直接比较整数数组。

    import cv2
    import numpy as np
    import time

    start_time = time.time()
    img = cv2.imread('/home/user/Vision Artificial/fig_2.png')
    tam = np.size(img, 0), np.size(img, 1)
    target_BGR = [255, 0, 0]

    for i in range(tam[0]):
        for j in range(tam[1]):
            if not np.array_equal(target_BGR, img[i, j]):
                img[i, j] = [255, 255, 255]

    cv2.imwrite('/home/user/Vision Artificial/out.png', img)

    print(time.time() - start_time)

注意:也可以避免显式循环,将np.apply_along_axisaxis=2一起使用,但这在此处没有提供性能优势。