如何使用Python+OpenCV按指定标量调整图像特定区域的亮度
使用Python+OpenCV调整图像指定区域亮度的实现方法
示例参考
输入图像:

输出效果(调整框选区域亮度):
实现逻辑
- 读取目标图像,定位需要调整亮度的感兴趣区域(ROI)
- 单独对ROI区域的像素做亮度调整,自动截断像素值到0-255的有效范围,避免色彩异常
- 将调整后的ROI贴回原图对应位置,其余区域像素完全不修改
完整可运行代码
import cv2 import numpy as np # 读取图像 img = cv2.imread('input.jpg') if img is None: raise ValueError("图像读取失败,请检查文件路径是否正确") # 配置参数 brightness_offset = 60 # 正数为调亮,负数为调暗,取值范围建议-255~255 # 固定ROI坐标:左上角(x1,y1)、右下角(x2,y2),可根据需求自行修改 x1, y1 = 200, 150 x2, y2 = 450, 300 # -------------------------- # 可选:交互选择ROI区域,替换上面的固定坐标配置即可 # roi_params = cv2.selectROI('框选调整区域', img, showCrosshair=True, fromCenter=False) # x1, y1, w, h = roi_params # x2 = x1 + w # y2 = y1 + h # -------------------------- # 调整ROI亮度 roi = img[y1:y2, x1:x2] adjusted_roi = cv2.add(roi, np.full(roi.shape, brightness_offset, dtype=np.uint8)) # 替换回原图 img[y1:y2, x1:x2] = adjusted_roi # 输出结果 cv2.imshow('处理结果', img) cv2.imwrite('output.jpg', img) cv2.waitKey(0) cv2.destroyAllWindows()
关键说明
- 使用
cv2.add做亮度调整:该方法会自动将超过255的像素值截断为255,低于0的截断为0,不需要手动做范围判断,避免像素溢出导致的颜色错乱 - ROI提取采用numpy切片方式,修改切片内容后直接赋值回原图对应位置即可,不会影响其他区域的像素
- 若需要调整多块区域,重复ROI提取、调整、替换的步骤即可
内容的提问来源于stack exchange,提问作者Kimwaga Makono
相关产品推荐
相关产品推荐

