首页 > 解决方案 > 如何优化我的代码?(python-opencv-numpy)

问题描述

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: 

出.png

标签: pythonnumpyopencv

解决方案


整数数组到字符串的转换很慢。相反,使用 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_axiswith ,axis=2但这不会提供性能优势。


推荐阅读