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等参数处理边缘 - 旋转图像时可能丢失部分内容,需调整输出图像尺寸
1128

被折叠的 条评论
为什么被折叠?



