Python 3.x 获取图像的所有像素[魔杖]
我正在使用,并试图解决,我当前的问题要求我获得所有偶数/奇数像素 显然,这是一项非常简单的任务。然而,我发现魔杖库在加载像素/复制像素方面相当慢(可能是因为我还将填充颜色更改为每个像素的颜色?),我想知道是否可以一次加载所有像素 我当前加载所有像素的解决方案如下:Python 3.x 获取图像的所有像素[魔杖],python-3.x,wand,Python 3.x,Wand,我正在使用,并试图解决,我当前的问题要求我获得所有偶数/奇数像素 显然,这是一项非常简单的任务。然而,我发现魔杖库在加载像素/复制像素方面相当慢(可能是因为我还将填充颜色更改为每个像素的颜色?),我想知道是否可以一次加载所有像素 我当前加载所有像素的解决方案如下: from wand.image import Image img = Image(filename="5808.jpg") pixels = [] for x in range(img.width+1): for y in r
from wand.image import Image
img = Image(filename="5808.jpg")
pixels = []
for x in range(img.width+1):
for y in range(img.height+1):
pixels.append(img[x, y])
print(pixels)
from wand.image import Image
img = Image(filename="5808.jpg")
print(img.pixels)
我更喜欢这样的:
from wand.image import Image
img = Image(filename="5808.jpg")
pixels = []
for x in range(img.width+1):
for y in range(img.height+1):
pixels.append(img[x, y])
print(pixels)
from wand.image import Image
img = Image(filename="5808.jpg")
print(img.pixels)
有类似的吗?提前感谢。不必阅读Python挑战,只需关注问题 我更喜欢这样:
img.pixels
迭代图像大小以收集wand.color.color
对象会很慢,因为这会重复使用MagickWand的内部像素迭代和像素结构。正如前面所说的挑战是针对Python的,而不是针对C缓冲区,我建议只获取一次像素数据缓冲区。之后,您可以自由地迭代、比较、评估等,而无需ImageMagick资源
对于本例,我假设图像是下面的2x2 PNG(缩放以获得可见性)
从wand.image导入图像
#原型局部变量
像素=[]
宽度,高度=0,0
blob=无
#加载图像
将图像(filename='2x2.png')作为图像:
#强制像素数量介于0和255之间
image.depth=8
#保存宽度和高度供以后使用
宽度,高度=image.width,image.height
#将原始图像数据复制到blob字符串中
blob=image.make_blob(format='RGB')
#迭代blob并收集像素
对于范围(0,宽度*高度*3,3)内的光标:
#保存颜色值的元组
像素。追加((斑点[光标],#红色
水滴[光标+1],#绿色
水滴[光标+2])#蓝色
打印(像素)
#=> [(255, 0, 0), (0, 0, 255), (0, 128, 0), (255, 255, 255)]
这个例子很快,但请记住Python很好地处理对象。让我们扩展Image
对象,并创建满足img.pixels
的方法
#让我们创建一个通用像素类,以便于颜色管理
类MyPixel(对象):
红色=0
绿色=0
蓝色=0
def __;初始(自身,红色=0,绿色=0,蓝色=0):
self.red=红色
self.green=绿色
self.blue=蓝色
定义报告(自我):
返回u'{0.red:02X}{0.green:02X}{0.blue:02X}'。格式(self)
#扩展wand.image.image并添加新的'img.pixels'伪属性
类MyImage(图像):
#重复上面的例子
@财产
def像素(自身):
像素=[]
self.depth=8
blob=self.make_blob(format='RGB')
对于范围(0,self.width*self.height*3,3)内的光标:
像素=我的像素(红色=水滴[光标],
绿色=水滴[光标+1],
蓝色=水滴[光标+2])
像素。追加(像素)
返回像素
#调用自定义类;它收集您的自定义像素
使用MyImage(文件名=文件名)作为img:
打印(图像像素)
#=>[#FF0000,#0000FF,#008000,#FFFFFF]
没有尝试阅读Python挑战,只关注问题
我更喜欢这样:img.pixels
迭代图像大小以收集wand.color.color
对象会很慢,因为这会重复使用MagickWand的内部像素迭代和像素结构。正如前面所说的挑战是针对Python的,而不是针对C缓冲区,我建议只获取一次像素数据缓冲区。之后,您可以自由地迭代、比较、评估等,而无需ImageMagick资源
对于本例,我假设图像是下面的2x2 PNG(缩放以获得可见性)
从wand.image导入图像
#原型局部变量
像素=[]
宽度,高度=0,0
blob=无
#加载图像
将图像(filename='2x2.png')作为图像:
#强制像素数量介于0和255之间
image.depth=8
#保存宽度和高度供以后使用
宽度,高度=image.width,image.height
#将原始图像数据复制到blob字符串中
blob=image.make_blob(format='RGB')
#迭代blob并收集像素
对于范围(0,宽度*高度*3,3)内的光标:
#保存颜色值的元组
像素。追加((斑点[光标],#红色
水滴[光标+1],#绿色
水滴[光标+2])#蓝色
打印(像素)
#=> [(255, 0, 0), (0, 0, 255), (0, 128, 0), (255, 255, 255)]
这个例子很快,但请记住Python很好地处理对象。让我们扩展Image
对象,并创建满足img.pixels
的方法
#让我们创建一个通用像素类,以便于颜色管理
类MyPixel(对象):
红色=0
绿色=0
蓝色=0
def __;初始(自身,红色=0,绿色=0,蓝色=0):
self.red=红色
self.green=绿色
self.blue=蓝色
定义报告(自我):
返回u'{0.red:02X}{0.green:02X}{0.blue:02X}'。格式(self)
#扩展wand.image.image并添加新的'img.pixels'伪属性
类MyImage(图像):
#重复上面的例子
@财产
def像素(自身):
像素=[]
self.depth=8
blob=self.make_blob(format='RGB')
对于范围(0,self.width*self.height*3,3)内的光标:
像素=我的像素(红色=水滴[光标],
绿色=水滴[光标+1],
蓝色=水滴[光标+2])
像素。追加(像素)
返回像素
#调用自定义类;它收集您的自定义像素
使用MyImage(文件名=文件名)作为img:
打印(图像像素)
#=>[#FF0000,#0000FF,#008000,#FFFFFF]
谢谢您的帮助。若我发现自己在用魔杖,我会用这个,但我已经设法让枕头工作了。(我使用魔杖的唯一原因是枕头不可用。)谢谢你的帮助。如果我能找到我的