python条件替换,在Python中根据条件替换图像像素颜色

I have an RGBA image where I have to find if any pixel has red value < 150 and to replace such pixels to black. I am using following code for this:

import numpy as np

imgarr = np.array(img)

for x in range(imgarr.shape[0]):

for y in range(imgarr.shape[1]):

if imgarr[x, y][0] < 150: # red value < 150

imgarr[x, y] = (0,0,0,255)

However, this is a slow loop and I am sure it can be optimized using some function such as numpy.where, but I am not able to fit it in this code. How can this be solved?

解决方案

Use np.where with the mask of comparison against the threshold -

img = np.asarray(img)

imgarr = np.where(img[...,[0]]<150,(0,0,0,255),img)

We are using img[...,[0]] to keep the number of dims as needed for broadcasted assignment with np.where. So, another way would be to use img[...,0,None]<150 to get the mask that keeps dims.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值