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()
相关推荐
Ai-_Man12 分钟前
您您这可以把Grok的多个会话比如说。左侧的多个会话一次性导出吗?不是单条会话里面的多次会对话。AI导出鸭
javascript·人工智能·ai·小程序·电脑
Eric.4637 分钟前
Wan‑Animate+MiniMax-H3 本地部署 AI 漫剧流水线:8G 显存动作迁移与动态分镜工程实战
前端·人工智能·comfyui·ai漫剧
搭贝41 分钟前
上厕所的时间搭好一套系统:AI自动生成实测
开发语言·人工智能·低代码·ai·php·搭贝
明月_清风44 分钟前
SaaS 的三层挣钱逻辑,正在被 AI 从第一层击穿
人工智能·后端
福兮说1 小时前
秋招复习操作系统并发,我让 AI 生成了一张知识图谱,15 条关系里改了 5 条
人工智能·操作系统·知识图谱·秋招
老A的AI实验室1 小时前
Cyber Weekly #84
人工智能·ai·llm·agi·genai
lie..1 小时前
30天从零开始学AI应用开发(Day 18):文档切分与检索优化:RAG 效果好坏的分水岭
人工智能·ai·大模型
Είναι η κοπέλα1 小时前
显存计算与模型选择:你的显卡能跑多大的模型
人工智能·pytorch·python·开源·conda
ROSF68681 小时前
2026 仿石漆乳液供应商:市场布局与行业发展态势梳理
大数据·人工智能·python
Ada's1 小时前
Skill is all you need
人工智能