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

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

1. 二值化函数

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

参数

image:输入的灰度图像。

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

maxValue:最大值,通常为255。

type:二值化类型,如 cv2.THRESH_BINARYcv2.THRESH_BINARY_INV

返回值

binary_image:二值化后的图像。

应用

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

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

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

2. 自适应二值化函数

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

参数

image:输入的灰度图像。

maxValue:最大值,通常为255。

adaptiveMethod:自适应方法,如 cv2.ADAPTIVE_THRESH_MEAN_Ccv2.ADAPTIVE_THRESH_GAUSSIAN_C

thresholdType:二值化类型,如 cv2.THRESH_BINARYcv2.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()
相关推荐
聚客AI9 分钟前
大模型学习进阶路线图:从Prompt到预训练的四阶段全景解析
人工智能·llm·掘金·日新计划
晓131313 分钟前
第七章 OpenCV篇——角点检测与特征检测
人工智能·深度学习·计算机视觉
DeepSeek大模型官方教程44 分钟前
NLP之文本纠错开源大模型:兼看语音大模型总结
大数据·人工智能·ai·自然语言处理·大模型·产品经理·大模型学习
MidJourney中文版1 小时前
深度报告:中老年AI陪伴机器人需求分析
人工智能·机器人
王上上2 小时前
【论文阅读41】-LSTM-PINN预测人口
论文阅读·人工智能·lstm
智慧化智能化数字化方案2 小时前
69页全面预算管理体系的框架与落地【附全文阅读】
大数据·人工智能·全面预算管理·智慧财务·智慧预算
PyAIExplorer2 小时前
图像旋转:从原理到 OpenCV 实践
人工智能·opencv·计算机视觉
Wilber的技术分享2 小时前
【机器学习实战笔记 14】集成学习:XGBoost算法(一) 原理简介与快速应用
人工智能·笔记·算法·随机森林·机器学习·集成学习·xgboost
19892 小时前
【零基础学AI】第26讲:循环神经网络(RNN)与LSTM - 文本生成
人工智能·python·rnn·神经网络·机器学习·tensorflow·lstm
burg_xun3 小时前
【Vibe Coding 实战】我如何用 AI 把一张草图变成了能跑的应用
人工智能