Open CV图像处理基础函数详解

在图像处理中,有许多基础函数用于图像的预处理和特征提取。本文将详细介绍以下几个常用的图像处理函数:二值化函数、自适应二值化函数、腐蚀函数、膨胀函数、仿射变换函数和透视变换函数。我们将分别介绍它们的功能、参数、返回值以及应用场景。

1. 二值化函数

功能: 二值化函数将灰度图像转换为二值图像,即将图像中的像素值转换为0(黑色)或255(白色)。这有助于简化图像,便于后续处理。

参数:

image:输入的灰度图像。

threshold:阈值,用于区分前景和背景。

maxValue:最大值,通常为255。

type:二值化类型,如 cv2.THRESH_BINARY 或 cv2.THRESH_BINARY_INV。

返回值:

binary_image:二值化后的图像。

应用:

图像分割:将图像中的目标与背景分离。

特征提取:简化图像,便于后续处理。

文档图像处理:处理扫描文档,提取文本区域。

2. 自适应二值化函数

功能: 自适应二值化函数根据图像局部区域的灰度值动态调整阈值,适用于光照不均匀的图像。这使得在光照变化较大的场景中也能有效分割目标。

参数:

image:输入的灰度图像。

maxValue:最大值,通常为255。

adaptiveMethod:自适应方法,如 cv2.ADAPTIVE_THRESH_MEAN_C 或 cv2.ADAPTIVE_THRESH_GAUSSIAN_C。

thresholdType:二值化类型,如 cv2.THRESH_BINARY 或 cv2.THRESH_BINARY_INV。

blockSize:邻域大小,用于计算局部阈值。

C:常数,用于调整阈值。

返回值:

binary_image:自适应二值化后的图像。

应用:

文档图像处理:处理光照不均匀的文档图像。

图像分割:在光照变化较大的场景中分割目标。

车牌识别:处理光照变化较大的车牌图像。

3. 腐蚀函数

功能: 腐蚀函数用于去除图像中的小区域,通常用于去除噪声和细化边界。腐蚀操作会缩小前景区域,去除小的噪声点。

参数:

image:输入的二值图像。

kernel:腐蚀核,定义腐蚀的形状和大小,通常为矩形或圆形。

iterations:腐蚀迭代次数,默认为1。

返回值:

eroded_image:腐蚀后的图像。

应用:

去除噪声:去除图像中的小噪声点。

边界细化:细化图像边界,便于后续处理。

文本识别:去除文本图像中的噪声点。

4. 膨胀函数

功能: 膨胀函数用于填充图像中的小区域,通常用于连接断开的边界。膨胀操作会扩大前景区域,填充小的孔洞。

参数:

image:输入的二值图像。

kernel:膨胀核,定义膨胀的形状和大小,通常为矩形或圆形。

iterations:膨胀迭代次数,默认为1。

返回值:

dilated_image:膨胀后的图像。

应用:

填充孔洞:填充图像中的小孔洞。

边界扩展:扩展图像边界,便于后续处理。

文本识别:连接断开的文本区域。

5. 仿射变换函数

功能: 仿射变换函数用于对图像进行线性变换,包括旋转、缩放和平移。仿射变换可以保持平行线的平行性。

参数:

image:输入的图像。

M:变换矩阵,定义仿射变换的参数。

dsize:输出图像的尺寸。

返回值:

transformed_image:仿射变换后的图像。

应用:

图像校正:校正图像的倾斜和旋转。

特征匹配:在图像匹配中调整图像的大小和方向。

文档扫描:校正扫描文档的倾斜。

6. 透视变换函数

功能: 透视变换函数用于对图像进行透视变换,可以将图像从一个视角转换到另一个视角。透视变换可以校正图像的透视变形。

参数:

image:输入的图像。

M:变换矩阵,定义透视变换的参数。

dsize:输出图像的尺寸。

返回值:

transformed_image:透视变换后的图像。

应用:

文档扫描:校正扫描文档的透视变形。

特征提取:在图像匹配中调整图像的透视角度。

车牌识别:校正车牌图像的透视变形。

7.示例代码
python 复制代码
import cv2
import numpy as np

# 读取图像
image = cv2.imread('image.jpg', cv2.IMREAD_GRAYSCALE)

# 二值化
_, binary_image = cv2.threshold(image, 127, 255, cv2.THRESH_BINARY)

# 自适应二值化
adaptive_binary_image = cv2.adaptiveThreshold(image, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 11, 2)

# 腐蚀
kernel = np.ones((3, 3), np.uint8)
eroded_image = cv2.erode(binary_image, kernel, iterations=1)

# 膨胀
dilated_image = cv2.dilate(binary_image, kernel, iterations=1)

# 仿射变换
M = np.float32([[1, 0.5, 0], [0, 1, 0]])
affine_transformed_image = cv2.warpAffine(image, M, (image.shape[1], image.shape[0]))

# 透视变换
pts1 = np.float32([[50, 50], [200, 50], [50, 200], [200, 200]])
pts2 = np.float32([[10, 10], [200, 10], [10, 200], [200, 200]])
M = cv2.getPerspectiveTransform(pts1, pts2)
perspective_transformed_image = cv2.warpPerspective(image, M, (image.shape[1], image.shape[0]))

# 显示结果
cv2.imshow('Original Image', image)
cv2.imshow('Binary Image', binary_image)
cv2.imshow('Adaptive Binary Image', adaptive_binary_image)
cv2.imshow('Eroded Image', eroded_image)
cv2.imshow('Dilated Image', dilated_image)
cv2.imshow('Affine Transformed Image', affine_transformed_image)
cv2.imshow('Perspective Transformed Image', perspective_transformed_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
相关推荐
张彦峰ZYF11 小时前
越过边界之前:Reward Seeker 实验如何改写智能体安全的时间逻辑
人工智能·ai agent·anthropic·智能体安全·reward seeker·“控制评价过程”泛化跨领域策略·envbom
拓恒技术11 小时前
无人机巡检AI算法的工程化落地:从需求到交付的5个核心环节
人工智能·算法·无人机
罗西的思考14 小时前
AI 时代的 “房谋杜断”:如何培养能力、品味与判断力
人工智能·算法·机器学习
字节跳动视频云技术团队14 小时前
720P 直升 8K,解密 2026 抖音美好奇妙夜巨幕超分黑科技
人工智能·音视频开发
打工仔折腾 AI14 小时前
在 Ubuntu ARM64 部署 Q1 V3.0 MuJoCo 模型:加载、单步推理与执行器响应解析
linux·运维·人工智能·python·深度学习·ubuntu·性能优化
逐米时代15 小时前
从试点验证到协同深化:制造业AI转型三年路线图设计方法
人工智能
GlobalInfo15 小时前
全球及中国风电叶片检测机器人行业研究报告(2026版):市场现状、行业前景与占有率分析
运维·网络·人工智能·机器人
stormzhangV15 小时前
AI 越强,失业越严重
人工智能·aigc
夏文强16 小时前
Rerank 与混合检索:怎么让 RAG 从「能用」变成「好用」
人工智能·大模型·向量数据库·rag·检索增强生成
救救孩子把16 小时前
AI面试八股文-23_23-Agent可观测性与生产监控面试题
人工智能·面试·职场和发展·agent·langsmith·langfuase