python 如何不用循环语句实现对矩阵数据的批量操作?

以下代码实现对图片指定颜色的批量替换,但是使用了循环语句。看了以后我强迫症犯了。知道Numpy库可以直接调佣intel cpu 的mkl指令集实现“矩阵运算”。可以大大提高运算效率,不知道在如下代码中应该使用什么函数替代循环,完成快速完成同样的任务

from PIL import Image

i = 1
j = 1
img = Image.open("e:/pic/222.jpg")#读取系统的内照片
print (img.size)#打印图片大小
print (img.getpixel((4,4)))

width = img.size[0]#长度
height = img.size[1]#宽度
for i in range(0,width):#遍历所有长度的点
    for j in range(0,height):#遍历所有宽度的点
        data = (img.getpixel((i,j)))#打印该图片的所有点
        print (data)#打印每个像素点的颜色RGBA的值(r,g,b,alpha)
        print (data[0])#打印RGBA的r值
        if (data[0]>=170 and data[1]>=170 and data[2]>=170):#RGBA的r值大于170,并且g值大于170,并且b值大于170
            img.putpixel((i,j),(234,53,57,255))#则这些像素点的颜色改成大红色
img = img.convert("RGB")#把图片强制转成RGB
img.save("e:/pic/testee1.jpg")#保存修改像素点后的图片
————————————————
版权声明:本文为CSDN博主「徐为波」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/xwbk12/java/article/details/78998196
讨论数量: 1
Jason990420

不知道你的 JPG 怎么会是 RGBA, JPG 不支持透明度, 应该是 RGB. 所以这里读入的图像是 PNG.

import numpy as np
from PIL import Image

im = Image.open('e:/pic/222.png')

image = np.array(im, dtype=np.uint8)
mask = np.all(image >= (170, 170, 170, 0), axis=-1)
image[mask] = (234,53,57,255)

new_im = Image.fromarray(image)
3年前 评论
kakabobo (楼主) 3年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!