OpenCV 图像调整指南

OpenCV 提供了多种图像调整功能,以下是常见的视觉图片调整方法:

一、基本调整

1. 调整亮度和对比度

复制代码
import cv2
import numpy as np

def adjust_brightness_contrast(img, brightness=0, contrast=0):
    # 亮度和对比度调整
    # brightness: -100 到 100 (0 表示不变)
    # contrast: -100 到 100 (0 表示不变)
    brightness = brightness / 255.0
    contrast = contrast / 127.0
    
    if contrast > 0:
        delta = 127.0 * contrast
        a = 255.0 / (255.0 - delta * 2)
        b = a * (brightness - delta)
    else:
        delta = -128.0 * contrast
        a = (256.0 - delta * 2) / 255.0
        b = a * brightness + delta
    
    img = cv2.addWeighted(img, a, img, 0, b)
    return img

2. 调整大小

复制代码
# 按比例缩放
def resize_image(img, scale_percent):
    width = int(img.shape[1] * scale_percent / 100)
    height = int(img.shape[0] * scale_percent / 100)
    dim = (width, height)
    return cv2.resize(img, dim, interpolation=cv2.INTER_AREA)

# 指定尺寸
resized = cv2.resize(img, (new_width, new_height), interpolation=cv2.INTER_LINEAR)

二、色彩调整

1. 转换为灰度图

复制代码
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

2. 调整色相和饱和度 (HSV空间)

复制代码
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
h, s, v = cv2.split(hsv)

# 调整饱和度
s = cv2.add(s, saturation_value)
hsv = cv2.merge([h, s, v])
adjusted = cv2.cvtColor(hsv, cv2.COLOR_HSV2BGR)

3. 白平衡调整

复制代码
# 简单白平衡
def white_balance(img):
    result = cv2.cvtColor(img, cv2.COLOR_BGR2LAB)
    avg_a = np.average(result[:, :, 1])
    avg_b = np.average(result[:, :, 2])
    result[:, :, 1] = result[:, :, 1] - ((avg_a - 128) * (result[:, :, 0] / 255.0) * 1.1
    result[:, :, 2] = result[:, :, 2] - ((avg_b - 128) * (result[:, :, 0] / 255.0) * 1.1
    result = cv2.cvtColor(result, cv2.COLOR_LAB2BGR)
    return result

三、图像增强

1. 锐化

复制代码
kernel = np.array([[-1,-1,-1], 
                   [-1,9,-1], 
                   [-1,-1,-1]])
sharpened = cv2.filter2D(img, -1, kernel)

2. 去噪

复制代码
denoised = cv2.fastNlMeansDenoisingColored(img, None, 10, 10, 7, 21)

3. 直方图均衡化

复制代码
# 灰度图
equ = cv2.equalizeHist(gray_img)

# 彩色图 (在Y通道上应用)
img_yuv = cv2.cvtColor(img, cv2.COLOR_BGR2YUV)
img_yuv[:,:,0] = cv2.equalizeHist(img_yuv[:,:,0])
equ_color = cv2.cvtColor(img_yuv, cv2.COLOR_YUV2BGR)

四、几何变换

1. 旋转

复制代码
(h, w) = img.shape[:2]
center = (w // 2, h // 2)
M = cv2.getRotationMatrix2D(center, angle, scale)  # angle为旋转角度
rotated = cv2.warpAffine(img, M, (w, h))

2. 透视变换

复制代码
pts1 = np.float32([[x1,y1],[x2,y2],[x3,y3],[x4,y4]])
pts2 = np.float32([[0,0],[w,0],[0,h],[w,h]])
M = cv2.getPerspectiveTransform(pts1, pts2)
perspective = cv2.warpPerspective(img, M, (w,h))

五、保存调整后的图像

复制代码
cv2.imwrite('adjusted_image.jpg', adjusted_img, [int(cv2.IMWRITE_JPEG_QUALITY), 90])

这些是OpenCV中常用的图像调整技术,您可以根据具体需求组合使用这些方法。

相关推荐
TonyLee0171 分钟前
新型学习范式(机器学习)
人工智能·学习·机器学习
Deepoch1 分钟前
Deepoc具身大模型居家机器人:重新定义家庭智能服务新标准
人工智能·机器人·具身模型·deepoc·居家机器人·居家好物·智能居家
ucancode3 分钟前
AI --> Mermaid --> 图形可视化 (UI)
人工智能·ui·ai·mermaid
小李AI飞刀^_^5 分钟前
AlphaEarth Foundations:面向全球尺度的嵌入场模型
人工智能
KmBase7 分钟前
【AI】从同构到多态:AGI的可能之路
人工智能·agi
翱翔的苍鹰11 分钟前
完整的“RNN + jieba 中文情感分析”项目之一:需要添加添加 JWT 认证
人工智能·python·rnn
minhuan12 分钟前
大模型应用:拆解大模型算力需求:算力是什么?怎么衡量?如何匹配?.64
人工智能·gpu算力·大模型应用·算力评估·算力优化
凤希AI伴侣13 分钟前
凤希AI伴侣功能修复与积分系统上线-2026年1月23日
人工智能·凤希ai伴侣
Cherry的跨界思维18 分钟前
【AI测试全栈:质量】40、数据平权之路:Python+Java+Vue全栈实战偏见检测与公平性测试
java·人工智能·python·机器学习·ai测试·ai全栈·ai测试全栈
北京盟通科技官方账号18 分钟前
从“人机交互”到“数字预演”:详解 HMI、SCADA 与虚拟调试的闭环架构
人工智能·人机交互·数字孪生·scada·系统集成·hmi·虚拟调试