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()
相关推荐
仗剑_走天涯1 小时前
基于pytorch.nn模块实现线性模型
人工智能·pytorch·python·深度学习
cnbestec2 小时前
协作机器人UR7e与UR12e:轻量化设计与高负载能力助力“小而美”智造升级
人工智能·机器人·协作机器人·ur协作机器人·ur7e·ur12e
zskj_zhyl2 小时前
毫米波雷达守护银发安全:七彩喜跌倒检测仪重构居家养老防线
人工智能·安全·重构
gaosushexiangji3 小时前
利用sCMOS科学相机测量激光散射强度
大数据·人工智能·数码相机·计算机视觉
ai小鬼头4 小时前
AIStarter新版重磅来袭!永久订阅限时福利抢先看
人工智能·开源·github
说私域4 小时前
从品牌附庸到自我表达:定制开发开源AI智能名片S2B2C商城小程序赋能下的营销变革
人工智能·小程序
飞哥数智坊5 小时前
新版定价不够用,Cursor如何退回旧版定价
人工智能·cursor
12点一刻5 小时前
搭建自动化工作流:探寻解放双手的有效方案(2)
运维·人工智能·自动化·deepseek
未来之窗软件服务5 小时前
东方仙盟AI数据中间件使用教程:开启数据交互与自动化应用新时代——仙盟创梦IDE
运维·人工智能·自动化·仙盟创梦ide·东方仙盟·阿雪技术观
JNU freshman6 小时前
计算机视觉速成 之 概述
人工智能·计算机视觉