CV 入门实战:OpenCV 实现图像滤波、边缘检测与形态学操作

OpenCV 图像处理实战:滤波、边缘检测与形态学操作

一、图像滤波(平滑处理)

图像滤波用于消除噪声或模糊细节,常用方法:

  1. 均值滤波
    用邻域像素平均值替换中心像素值:
    $$ I'(x,y) = \frac{1}{k^2} \sum_{i=-a}^{a} \sum_{j=-b}^{b} I(x+i,y+j) $$

    import cv2
    img = cv2.imread('image.jpg')
    blur = cv2.blur(img, (5,5))  # 5x5 均值滤波核
    

  2. 高斯滤波
    加权平均,中心权重最高:
    $$ G(x,y) = \frac{1}{2\pi\sigma^2}e^{-\frac{x^2+y^2}{2\sigma^2}} $$

    gaussian = cv2.GaussianBlur(img, (5,5), 0)  # 核大小5x5, σ自动计算
    


二、边缘检测

识别图像中物体边界:

  1. Sobel算子
    计算梯度近似值:
    $ G_x = \begin{bmatrix} -1 & 0 & 1 \ -2 & 0 & 2 \ -1 & 0 & 1 \end{bmatrix} * I $
    $ G_y = \begin{bmatrix} -1 & -2 & -1 \ 0 & 0 & 0 \ 1 & 2 & 1 \end{bmatrix} * I $

    sobelx = cv2.Sobel(img, cv2.CV_64F, 1, 0, ksize=3)  # x方向
    sobely = cv2.Sobel(img, cv2.CV_64F, 0, 1, ksize=3)  # y方向
    

  2. Canny边缘检测
    四步流程:噪声抑制→梯度计算→非极大值抑制→双阈值检测

    edges = cv2.Canny(img, 100, 200)  # 低阈值100, 高阈值200
    


三、形态学操作

处理二值图像的形状特征:

操作数学定义效果
腐蚀$ A \ominus B = {z \mid (B)_z \subseteq A} $缩小前景区域
膨胀$ A \oplus B = {z \mid (\hat{B})_z \cap A \neq \emptyset} $扩大前景区域
开运算$ A \circ B = (A \ominus B) \oplus B $消除细小噪点
闭运算$ A \bullet B = (A \oplus B) \ominus B $填充细小孔洞
kernel = np.ones((3,3), np.uint8)  # 3x3结构元素

# 腐蚀与膨胀
erosion = cv2.erode(img, kernel, iterations=1)  
dilation = cv2.dilate(img, kernel, iterations=1)

# 开闭运算
opening = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)
closing = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel)


四、综合实战示例
import cv2
import numpy as np

# 1. 读取并预处理
img = cv2.imread('input.jpg', 0)  # 灰度读取
img = cv2.GaussianBlur(img, (5,5), 0)

# 2. 边缘检测
edges = cv2.Canny(img, 50, 150)

# 3. 形态学优化
kernel = np.ones((3,3), np.uint8)
clean_edges = cv2.morphologyEx(edges, cv2.MORPH_CLOSE, kernel)

# 4. 结果可视化
cv2.imshow('Original', img)
cv2.imshow('Edge Detection', clean_edges)
cv2.waitKey(0)

关键提示

  • 滤波核尺寸越大,平滑效果越强但细节损失越多
  • Canny阈值需根据图像动态调整(建议低阈值:高阈值≈1:2或1:3)
  • 形态学操作中,结构元素形状影响处理效果(圆形/十字形等)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值