You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何计算10张同尺寸图片中指定像素点(150,220)的平均值?

计算多张图片指定像素点的BGR平均值

嘿,我来帮你搞定这个计算多张图片指定像素平均值的问题~首先咱们先理清楚核心逻辑:要算出(150,220)这个像素点的平均值,就是把每张图片在这个位置的三个通道数值分别累加,再除以图片总数就行。另外要注意哦,OpenCV读取的图片是BGR通道顺序(不是咱们常说的RGB),这点别搞混啦。

先说说你现有代码可以优化的地方:逐个定义img1到img10太繁琐了,要是以后图片数量变多,维护起来超麻烦,咱们用循环批量读取图片,既简洁又灵活。

下面是完整的实现代码,我会一步步给你解释:

import cv2

# 定义图片路径的前缀和总数量
img_prefix = r'E:/000'
total_imgs = 10
# 指定要计算的像素坐标:(x, y),对应OpenCV的索引格式img[y, x]
target_x = 150
target_y = 220

# 初始化三个通道的累加变量
sum_blue = 0
sum_green = 0
sum_red = 0

# 循环读取每张图片并累加像素值
for i in range(1, total_imgs + 1):
    # 生成图片路径:比如i=1时是E:/0001.jpg,i=10时是E:/0010.jpg
    img_path = f"{img_prefix}{i}.jpg"
    img = cv2.imread(img_path)
    
    # 检查图片是否成功读取,避免因图片损坏/路径错误导致程序崩溃
    if img is None:
        print(f"警告:无法读取图片 {img_path}")
        continue
    
    # 提取目标像素的BGR值并累加
    b, g, r = img[target_y, target_x]
    sum_blue += b
    sum_green += g
    sum_red += r

# 计算平均值,可根据需求转成整数或保留小数
avg_blue = sum_blue / total_imgs
avg_green = sum_green / total_imgs
avg_red = sum_red / total_imgs

# 输出结果
print(f"目标像素({target_x}, {target_y})的BGR平均值:[{avg_blue}, {avg_green}, {avg_red}]")

代码细节说明:

  • 批量读取优化:通过循环自动生成图片路径,不用手动逐个定义变量,哪怕以后图片数量变成20张,只需要改total_imgs的值就行
  • 像素索引对应:OpenCV中图片的索引规则是img[y, x],所以你指定的(150,220)对应img[220, 150],和你的示例完全匹配
  • 异常防护:加入了图片读取失败的判断,避免某张图片出问题导致整段代码报错
  • 结果灵活处理:如果需要整数形式的平均值,只需要把计算结果套上int()就行,比如int(avg_blue)

拿你给的示例测试的话,假设每张图片的目标像素值依次是[1,2,3]、[2,3,4]……[10,11,12],运行代码后会得到:

目标像素(150, 220)的BGR平均值:[5.5, 6.5, 7.5]

完全符合你预期的计算结果~

内容的提问来源于stack exchange,提问作者user9147145

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:46:10