OpenCV图像处理全攻略

OpenCV 图像颜色处理

颜色处理是图像处理的基础操作之一,OpenCV提供了多种方法进行颜色空间转换和调整。

灰度化
将彩色图像转换为灰度图像的常用方法是cv2.cvtColor()函数:

import cv2
img = cv2.imread('image.jpg')
gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

灰度化公式采用加权平均法: [ Y = 0.299 \times R + 0.587 \times G + 0.114 \times B ]

颜色空间转换
HSV/HLS等颜色空间转换示例:

hsv_img = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
lab_img = cv2.cvtColor(img, cv2.COLOR_BGR2LAB)


图像二值化处理

二值化将灰度图像转换为黑白图像,常用于目标分割。

全局阈值法

_, binary_img = cv2.threshold(gray_img, 127, 255, cv2.THRESH_BINARY)

自适应阈值法
适用于光照不均的图像:

binary_adaptive = cv2.adaptiveThreshold(
    gray_img, 255, 
    cv2.ADAPTIVE_THRESH_GAUSSIAN_C, 
    cv2.THRESH_BINARY, 11, 2
)

OTSU算法
自动计算最佳阈值:

_, otsu_img = cv2.threshold(
    gray_img, 0, 255, 
    cv2.THRESH_BINARY + cv2.THRESH_OTSU
)


仿射变换

仿射变换保持图像平行性和直线性,包括平移、旋转、缩放和剪切。

平移变换

import numpy as np
M = np.float32([[1, 0, 100], [0, 1, 50]])  # x方向平移100,y方向平移50
translated_img = cv2.warpAffine(img, M, (img.shape[1], img.shape[0]))

旋转+缩放
通过旋转矩阵实现:

center = (img.shape[1]//2, img.shape[0]//2)
M = cv2.getRotationMatrix2D(center, 45, 0.8)  # 旋转45度,缩放0.8倍
rotated_img = cv2.warpAffine(img, M, (img.shape[1], img.shape[0]))

三点法仿射变换
自定义变换前后三组对应点:

pts1 = np.float32([[50,50], [200,50], [50,200]])
pts2 = np.float32([[10,100], [200,50], [100,250]])
M = cv2.getAffineTransform(pts1, pts2)
warped_img = cv2.warpAffine(img, M, (img.shape[1], img.shape[0]))


关键注意事项

  • 颜色转换时注意通道顺序,OpenCV默认使用BGR格式
  • 二值化阈值选择影响结果,可结合直方图分析最佳阈值
  • 仿射变换会引入黑边,可通过cv2.BORDER_REFLECT等参数处理边缘
  • 旋转图像时可能丢失部分内容,需调整输出图像尺寸
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值