当前位置: 首页 > news >正文

OpenCV 图像调整指南

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

一、基本调整

1. 调整亮度和对比度

import cv2
import numpy as npdef adjust_brightness_contrast(img, brightness=0, contrast=0):# 亮度和对比度调整# brightness: -100 到 100 (0 表示不变)# contrast: -100 到 100 (0 表示不变)brightness = brightness / 255.0contrast = contrast / 127.0if contrast > 0:delta = 127.0 * contrasta = 255.0 / (255.0 - delta * 2)b = a * (brightness - delta)else:delta = -128.0 * contrasta = (256.0 - delta * 2) / 255.0b = a * brightness + deltaimg = 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.1result[:, :, 2] = result[:, :, 2] - ((avg_b - 128) * (result[:, :, 0] / 255.0) * 1.1result = 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中常用的图像调整技术,您可以根据具体需求组合使用这些方法。

相关文章:

  • 【Python爬虫详解】第二篇:HTML结构的基本分析
  • RabbitMQ和Seata冲突吗?Seata与Spring中的事务管理冲突吗
  • 从0开始搭建一套工具函数库,发布npm,支持commonjs模块es模块和script引入使用
  • INFERENCE SCALING FOR LONG-CONTEXT RETRIEVAL AUGMENTED GENERATION
  • DB-Day9笔记-用户权限数据库备份事务索引视图
  • 坐标轴QCPAxis
  • Spring之我见 - Spring Boot Starter 自动装配原理
  • deepseek + kimi制作PPT
  • FOC控制中的正弦PWM和空间矢量PWM对比与理解
  • vscode使用技巧
  • STM32 CubeMx下载及安装(一)
  • Java基础-第一章、基本数据类型
  • python pdf转图片再OCR
  • 系统架构设计师:系统架构定义与分类相关知识点、记忆要点提示、记忆卡片、练习题、答案与解析
  • B树的异常恢复
  • 深入浅出讲解UDP检验中如何计算检验和
  • paddleocr出现: [WinError 127] 找不到指定的程序解决办法
  • ZYNQ笔记(九):定时器中断
  • 简易Linux GPIO工具
  • linux多线(进)程编程——(9)信号量(二)
  • “你是做什么的?”——人们能否对工作说不?
  • 碎片化时代如何阅读?巴金图书馆推出世界读书日系列活动
  • 海南热带雨林国家公园核心保护区一水电站设施将拆除,曾被中央环保督察通报
  • 道客网络陈齐彦:技术无界化,开源让AI变成了“全民食堂”
  • 北京一季度GDP为12159.9亿元,同比增长5.5%
  • 浙江金华一副镇长被指殴打村民,镇党委称仍在调查核实