图像红蓝像素交换函数异常,蓝色滤镜测试无效果求助
图像红蓝交换/蓝色滤镜问题排查与修复
当前代码的核心问题
- 直接修改原图像:Python里列表是可变对象,函数里修改
img会直接改掉外部加载的原图像,既容易搞乱原数据,也可能导致后续操作出问题。 - 没做图像副本:正确操作应该是新建一个和原图像一模一样的副本,在副本上修改像素,原图像保持不变。
修正后的蓝色滤镜代码
from CSE8AImage import * img = load_img('images/cat.jpg') def blue_filter(img): # 创建图像副本,避免修改原文件 new_img = copy_img(img) for r in range(len(new_img)): for c in range(len(new_img[r])): pix = new_img[r][c] # 仅保留蓝色通道,红、绿通道置0 new_img[r][c] = (0, 0, pix[2]) return new_img # 调用函数得到处理后的图像,再保存 filtered_img = blue_filter(img) save_img(filtered_img, 'blue_cat.jpg')
实现红蓝像素交换的函数
如果你的最终需求是互换图像里的红色和蓝色像素(红、蓝通道值交换,绿色通道不变),可以用这段代码:
from CSE8AImage import * img = load_img('images/cat.jpg') def swap_red_blue(img): new_img = copy_img(img) for r in range(len(new_img)): for c in range(len(new_img[r])): r_val, g_val, b_val = new_img[r][c] # 交换红、蓝通道,绿色通道保持原样 new_img[r][c] = (b_val, g_val, r_val) return new_img swapped_img = swap_red_blue(img) save_img(swapped_img, 'swapped_cat.jpg')
重要提示
- 一定要用
copy_img复制原图像,这是处理图像时的基本操作,能避免很多因对象引用导致的意外错误。 - 确认CSE8AImage库的像素顺序是**(R, G, B)**,如果是BGR顺序,调整一下通道索引就行,但这类教学用库一般都是RGB。
内容的提问来源于stack exchange,提问作者etena_fantom
相关产品推荐
相关产品推荐

