gpt4 book ai didi

python - Python 中的图像位操作

转载 作者:行者123 更新时间:2023-11-28 17:54:09 25 4
gpt4 key购买 nike

我有一个应用程序从用 ctypes 包装的相机 API 接收指向 JPEG 数据的指针,将其转换为 wx.Image,并将图像显示为电影。

所需的功能之一是将像素的两个分量设置为等于第三个分量。例如,我的 RGB 格式像素是 (100,200,255),我想将 R 和 B 值设置为等于 G,或 (200,200,200)。我需要做他适用于图像中的每个像素,同时保持良好的帧率。

我可以通过调用 Image.GetData 从我的 wx.Image 访问 RGB 值,它返回一个包含以下格式的像素值的字符串:RGBRGBRGB ...我通过迭代这个 RGBRGBRGB 字符串天真地实现了这个特性.

但是,这种幼稚的方法对于实现像样的 FPS 来说太慢了,因为(我认为):

a) 我正在遍历图像中的每个像素。

b) 我复制了太多数据。

我考虑过将我的 RGB 数据转换为 numpy,执行操作(我假设 numpy 有更快的方法来做这类事情),然后转换回 wx.Image。不幸的是,我无法直接将原始数据转换为 numpy,因为数据以 JPEG 形式出现,而不是以 RGB 位图形式出现。所以我需要从 data->wx.Image->numpy array->wx.Image 开始。

我还考虑过实现我自己的 python 缓冲区,例如,在读取时它将返回 G 像素值而不是 R 和 B 值。我认为这将是理想的解决方案,因为它不需要数据复制或过多的迭代,但我不知道如何去做。我需要用 C 语言编写这个缓冲区吗?是否有可能在纯 python 中实现缓冲区并仍然操作原始内存?

那么,您认为我应该如何提高我的表现?我应该尝试 numpy 或缓冲解决方案,还是我缺少更简单的解决方案?

我主要是在寻找相关文档或示例的想法/链接,但如果有人想编写一些代码,那很好:)

谢谢

最佳答案

您可以尝试使用 Python Imaging Library (PIL) - 这是一个用于处理图像的库。

您可以找到有关在 wxPython 图像和 PIL 图像之间转换的信息 here ,或者您可以将 jpeg 直接加载到 PIL 图像中。

一旦您将 wx 图像转换为 PIL 图像,我认为这将执行您想要的操作(但我还没有测试过):

r, g, b = im.split()              # split the image into separate color planes
im = Image.merge("RGB", (g, g, g)) # merge them back, using the green plane for each

然后将其转换回 wxPython 图像。

这应该比用 Python 快几个数量级,因为 PIL 是用 C 语言实现的,并且针对图像处理进行了优化。

关于python - Python 中的图像位操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3578373/

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