gpt4 book ai didi

Python 和 wx.Image : How to apply a simple function to every pixel FAST?

转载 作者:太空宇宙 更新时间:2023-11-03 19:10:17 25 4
gpt4 key购买 nike

我正在处理

  1. myWxImage,图像。
  2. myLabelImage,一个与图像形状相同的 numpy 数组,每个像素包含一个标签(整数)
  3. myLookupTable,一维 numpy 数组,即向量,其条目数与标签数相同。 (我用它来将标签映射到 float 。)

目标是迭代像素,对于每个像素,考虑其标签,查找相应的 float 并将其与该像素的颜色相乘。

下面的代码正是这样做的,但是太慢。您是否有一个简单的建议,如何在不诉诸 C++ 或 GPU 编程的情况下更快地完成此任务,这当然在这里很有意义?

weightedImage = wx.EmptyImage(myWxImage.Width, myWxImage.Height)
rgb = numpy.zeros(3, dtype=int);
for x in range(0, myWxImage.Width):
for y in range(0, myWxImage.Height):
label = myLabelImage[x, y]
weight = myLookUpTable[label]
rgb[0] = myWxImage.GetRed(x, y)
rgb[1] = myWxImage.GetGreen(x, y)
rgb[2] = myWxImage.GetBlue(x, y)
rgb = rgb * weight
weightedImage.SetRGB(x, y, rgb[0], rgb[1], rgb[2])
myBitmap = wx.BitmapFromImage(weightedImage)

# draw myBitmap

最佳答案

如果标签图像和查找表不变,您可以尝试以下方法:

  1. 将权重向量预先计算为一维 numpy float 组( reshape +查找),
  2. 使用wxImage GetData调用获取RGB图像数据
  3. 使用 fromstring 将其转换为 numpy 数组
  4. 使用 numpy 按元素相乘得到最终图像
  5. 使用 numpy array.tostring + wxImage.SetData 将其转回图像

直接在图像缓冲区本身上进行乘法(使用 GetDataBuffer )可能比通过 numpy 数组往返更快;你得花点时间看看。

关于Python 和 wx.Image : How to apply a simple function to every pixel FAST?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13225042/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com