用一维数组求和三维数组元素

2024-06-26 08:37:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我在一个计算机视觉项目中使用OpenCV,但是,我需要对图像进行逐像素操作,这意味着访问640x480图像中的每个像素并更改其HSV值。图像由3D阵列X、Y和HSV值组成,因此130、230处的像素可以具有HSV值[12、26、18]或在图像中表示:(130、230、(12、26、18))

我需要执行一个操作,允许我在HSV值的V值(元素索引2)中添加一个量X:(130,230,(12,26,18

我可以使用两个循环:

for x in range(image.width):
        for y in range(image.height/2):
            initcolor = cv.Get2D(image, y, x)
            initcolor2 = [0, 0, 10, 0]
            summed = [sum(pair) for pair in zip(initcolor, initcolor2)] 
            cv.Set2D(image, y, x, summed)

但这是非常缓慢的,由于某些原因,完成整个图像的操作大约需要20秒。在

有没有更简单、更快速的方法来实现这一点?在


Tags: 项目in图像imagefor计算机range像素
2条回答

您应该做的第一件也是最简单的事情是检查OpenCV是否可以将numpy数组作为参数。Numpy是建立在快速C算法之上的,它可以在所谓的“矢量化”操作中处理数据结构上的大循环。Python中的每个循环都会产生非常大的开销。在

另一种选择可能是将这段代码放在Cython中,这样可以更好地处理类似这样的紧循环。在

如果我用Python编写计算机视觉,我肯定会使用Numpy并尽快将数组转换成Numpy格式。我想你可能想阿萨雷()从PIL转换为数组。在

相关问题 更多 >