繁体   English   中英

在 Python 中循环遍历帧像素的更快方法?

[英]Faster way to loop through the pixel of a frame in Python?

试图从一帧输入视频中找到每个像素的 HSL 值,但它花费了大约 0.2 秒的时间,但希望将时间减少到至少在 0.1 秒内。

def colorize(im, h, s, l_adjust):
    result = Image.new('RGBA', im.size)
    pixin = im.load()
    pixout = result.load()
    for y in range(im.size[1]):
        for x in range(im.size[0]):
            currentR, currentG, currentB = pixin[x, y][0]/255 , pixin[x, y][1]/255, pixin[x, y][2]/255
            #luminance
            lum = (currentR * 0.2126) + (currentG * 0.7152) + (currentB * 0.0722)
            if l_adjust > 0:
                lum = lum * (1 - l_adjust)
                lum = lum + (1.0 - (1.0 - l_adjust))
            else:
                lum = lum * (l_adjust + 1)
            l = lum
            r, g, b = colorsys.hls_to_rgb(h, l, s)
            r, g, b = int(r * 255.99), int(g * 255.99), int(b * 255.99)
            pixout[x, y] = (r, g, b, 255)
    return result

在不使用这两个循环的情况下,有没有更快的方法来做到这一点? 寻找类似 LUT(Look up table) 或使用 NumPy 快捷方式的东西来避免这 2 个循环。 谢谢

使用内置的cv.cvtColor(im, cv2.COLOR_RGB2HLS) (或CUDA 加速等效项),因为它将用 C++ 编码并为您的处理器进行优化。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM