检测python/pygame中图像之间的差异
我正在用树莓皮做一个艺术项目。我正在制作一个仅替换图像中已更改区域的时间点 当使用alpha通道从两个不同阵列的像素创建PixelArray以确定使用哪个像素时,处理器会达到最大值并运行非常缓慢:检测python/pygame中图像之间的差异,python,image-processing,pygame,raspberry-pi,Python,Image Processing,Pygame,Raspberry Pi,我正在用树莓皮做一个艺术项目。我正在制作一个仅替换图像中已更改区域的时间点 当使用alpha通道从两个不同阵列的像素创建PixelArray以确定使用哪个像素时,处理器会达到最大值并运行非常缓慢: alphachannelarray = basearray.compare(imgarray, distance=0.08, weights=(0.01, 0.01, 0.01)) alphachannel = alphachannelarray.make_surface()
alphachannelarray = basearray.compare(imgarray, distance=0.08, weights=(0.01, 0.01, 0.01))
alphachannel = alphachannelarray.make_surface()
for col in range (0, 800):
for cell in range (0, 600):
if alphachannelarray[col, cell] == alphachannel.map_rgb ((0,0,0)):
imgarray[col, cell] = imgoldarray[col,cell] #if alpha channel is black use imgold pixel
elif alphachannelarray[col, cell] == alphachannel.map_rgb ((255,255,255)):
imgarray[col, cell] = imgarray[col][cell] #il alpha channel is white use img pixel
pygame中有没有一种方法可以比for循环更快地访问图像中的所有像素
谢谢!
-汤米我不知道完整答案,但有几个想法/注意事项:
imgarray[x:y]=(255255,0)
vsimgarray[x,y]=(255,255,0)
防止使用numpy数组。更多示例:你只需在像素之间循环,只改变那些不匹配的像素,你不必在其他像素上重画透明像素。如果你a)一次只问一个问题,你可能会得到更好的回答,b)发布显示问题所需的最少代码量,c)描述您已经完成的任何调试和故障排除hi,欢迎使用SO。你可以考虑把问题分解成2个单独的问题(性能和缺乏更新)。此外,如果你对你的期望更具体,你会增加获得帮助的机会。谢谢你的快速回复!我应该编辑我的原始问题还是发布新问题?是其中一种不好的礼节吗?编辑你的问题是最好的方式。我会对这篇文章进行编辑,以关注缺乏更新的问题,然后当你有一些真正有效的东西时,如果你仍然存在性能问题,你可以发布一个新的问题谢谢,猴子!在1.中你是正确的,我正在尝试使某些像素透明(与早期图像不匹配的像素)。切片表示法在PixelArray中不太容易使用,访问每个像素需要相当多的处理。我将进一步研究无阈值比较。再次感谢!我发现使用surfarray和访问numpy.putmask的速度非常快!numpy.putmask(img3d,alphachannel3d=[0,0,0],imgold3d)谢谢!