Python/Pillow:使用 max/min RGB 值过滤像素
Python/Pillow: Filter pixels with max/min RGB values
我有一张图片,其中每个像素都是最大和最小 RGB 值的随机组合(即 [255, 0, 255]、[0, 0, 255]、[255,255,255])。
但是,该图像确实包含一些隐藏在噪声中的非常轻微、难以察觉的变色的文本。我正在尝试编写一些简单的 Python 来白化所有包含最大或最小 RGB 值的像素,以便隐藏的消息清晰可见。
程序应该非常简单,像这样:
open image
get width and height
for x in width
for y in height
if any channel value of pixel (x,y) is either 0 or 255
set color of (x,y) to [255, 255, 255]
我卡住的主要部分是改变颜色的条件;我可以先分别检查每个像素的红色值,然后是绿色,然后是蓝色,但是由于我试图使代码尽可能紧凑,所以我想知道如何同时测试数组中的所有三个元素而不是使用单独的 if 语句。
任何提示将不胜感激。谢谢!
由于 RGB 值作为单个数组给出,您可以使用关键字 in
:
# channels = [255, 0, 0]
if 0 in channels or 255 in channels:
channels = [255, 255, 255]
您甚至可以 combine multiple in
checks,但只检查 2 次就太多了。
我有一张图片,其中每个像素都是最大和最小 RGB 值的随机组合(即 [255, 0, 255]、[0, 0, 255]、[255,255,255])。
但是,该图像确实包含一些隐藏在噪声中的非常轻微、难以察觉的变色的文本。我正在尝试编写一些简单的 Python 来白化所有包含最大或最小 RGB 值的像素,以便隐藏的消息清晰可见。
程序应该非常简单,像这样:
open image
get width and height
for x in width
for y in height
if any channel value of pixel (x,y) is either 0 or 255
set color of (x,y) to [255, 255, 255]
我卡住的主要部分是改变颜色的条件;我可以先分别检查每个像素的红色值,然后是绿色,然后是蓝色,但是由于我试图使代码尽可能紧凑,所以我想知道如何同时测试数组中的所有三个元素而不是使用单独的 if 语句。 任何提示将不胜感激。谢谢!
由于 RGB 值作为单个数组给出,您可以使用关键字 in
:
# channels = [255, 0, 0]
if 0 in channels or 255 in channels:
channels = [255, 255, 255]
您甚至可以 combine multiple in
checks,但只检查 2 次就太多了。