在 Python 或 C++ 中获取像素颜色的最快方法?

Posted

技术标签:

【中文标题】在 Python 或 C++ 中获取像素颜色的最快方法?【英文标题】:Fastest way to get pixel color in Python or C++? 【发布时间】:2011-01-29 12:39:30 【问题描述】:

我正在尝试为我正在制作的透明 Tkinter 小部件添加模糊效果。

我用这条线 (sn-p) 使小部件部分透明

self.attributes("-alpha", 0.85)

为了添加我想要的效果,我需要获取小部件中每个像素的 RGB 值。看到小部件只是部分不透明,我不能使用 .cget 方法,因为它返回的是填充 RGB 值(部分透明之前的颜色),而不是实际的 RGB 值。

我目前正在使用这个功能(sn-p)

def get_pixel_colour(self, i_x, i_y):
    i_desktop_window_id = win32gui.GetDesktopWindow()
    i_desktop_window_dc = win32gui.GetWindowDC(i_desktop_window_id)
    long_colour = win32gui.GetPixel(i_desktop_window_dc, i_x, i_y)
    i_colour = int(long_colour)
    return (i_colour & 0xff), ((i_colour >> 8) & 0xff), ((i_colour >> 16) & 0xff)

但是,对于我的目的来说,它太慢了。有没有更快的方法来获得像素颜色?

编辑:

如果 Python 太慢了,我也可以使用 C++。 我只需要获取不同 x、y 坐标处像素的 RGB 值。

【问题讨论】:

这听起来确实像在 Python 中完成的那样太慢了。似乎您甚至在那里引入了令人讨厌的平台依赖项。对于实时图形,get_pixel_color 函数通常是个坏主意。 查看编辑,也只能在 Windows 中工作 哦,那么您是否已经有了另一个无法解决的平台依赖项? 不是绕不过去;只是如果不对代码进行实质性修改,我就无法绕过它。因此,与平台相关的另一部分无关紧要。 【参考方案1】:

您可能希望查看 Python 图像库,您可以这样调用

import Image
im = Image.open("name_of_file.jpg")
list_of_pixels = list(im.getdata())
print list_of_pixels[0]

这将以 RGB 格式输出第一个像素,例如 (255,255,255) 它非常快,但我相信它永远不会击败 C++

【讨论】:

以上是关于在 Python 或 C++ 中获取像素颜色的最快方法?的主要内容,如果未能解决你的问题,请参考以下文章

检测特定像素上的某种颜色并在检测到后发送点击的最快方法是啥?

在 Python 中为图像中的每个像素选择 7*7 相邻像素的最快方法

从背景中的窗口获取像素颜色

在python中迭代图像的所有像素的最快方法

使用 OpenCV 获取二进制图像中白色像素数量的最快方法

以最快的速度获取字符串中图像的所有像素数据