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()
相关推荐
AIGC大时代20 分钟前
数据分析如何正确使用ChatGPT进行辅助?
大数据·人工智能·深度学习·chatgpt·数据挖掘·数据分析·aigc
懒麻蛇25 分钟前
ChatGPT Task功能初探
人工智能·chatgpt
程亦寻30 分钟前
物联网与前沿技术融合分析
人工智能·物联网·区块链·量子计算
正在走向自律1 小时前
当AI Agent遇上CRM:客户关系管理的智能化变革(29/30)
人工智能·crm系统·ai agent·ai智能体
滴滴哒哒答答2 小时前
《自动驾驶与机器人中的SLAM技术》ch8:基于预积分和图优化的紧耦合 LIO 系统
人工智能·机器人·自动驾驶
从零开始学习人工智能2 小时前
傅里叶变换在语音识别中的关键作用
人工智能·语音识别
Landy_Jay3 小时前
深度学习:大模型Decoding+MindSpore NLP分布式推理详解
人工智能·深度学习
一点一木3 小时前
从零开始:使用 Brain.js 创建你的第一个神经网络(一)
前端·javascript·人工智能
cooldream20093 小时前
数据可视化:让数据讲故事的艺术
人工智能·知识图谱
Ajaxm3 小时前
3dgs代码+原理
计算机视觉·3d