OpenCV--图像梯度处理,图片轮廓,边缘检测

一.图像梯度处理

  • 图像梯度处理是图像分析中的一个重要技术,用于检测图像中的边缘、纹理和结构。梯度表示图像亮度变化的方向和幅度,常用于边缘检测、特征提取和图像分割等任务。以下是 OpenCV 中常用的图像梯度处理方法及其函数。

1. 梯度计算

Sobel 算子–cv2.Sobel()`

Sobel 算子用于计算图像在水平和垂直方向的梯度。这有助于检测边缘。

函数:cv2.Sobel()

函数签名:

cv2.Sobel(src, ddepth, dx, dy, ksize, scale=1, delta=0, borderType=cv2.BORDER_DEFAULT)

参数解释:

  • src:输入图像(通常是灰度图像)。
  • ddepth:目标图像的深度,常用 cv2.CV_16S(有符号 16 位)或 cv2.CV_8U(无符号 8 位)。
  • dx:x 方向的导数阶数(0 表示不计算 x 方向的梯度)。
  • dy:y 方向的导数阶数(0 表示不计算 y 方向的梯度)。
  • ksize:Sobel 卷积核的大小(常用值为 1、3、5、7)。
  • scale:缩放系数,用于调整结果的大小(默认值 1)。
  • delta:在计算梯度值时添加的偏移量(默认值 0)。
  • borderType:边界类型,通常使用 cv2.BORDER_DEFAULT

示例代码:

import cv2
import numpy as np

# 读取灰度图像
gray_image = cv2.imread('gray_image.jpg', cv2.IMREAD_GRAYSCALE)

# 计算 x 方向的梯度
sobel_x = cv2.Sobel(gray_image, -1, 1, 0, ksize=3)

# 计算 y 方向的梯度
sobel_y = cv2.Sobel(gray_image,-1, 0, 1, ksize=3)

# 合并 x 和 y 方向的梯度
sobel_combined = cv2.addWeighted(sobel_x, 0.5, sobel_y, 0.5, 0)

# 显示图像
cv2.imshow('Sobel X', sobel_x)
cv2.imshow('Sobel Y', sobel_y)
cv2.imshow('Sobel Combined', sobel_combined)
cv2.waitKey(0)
cv2.destroyAllWindows()
Laplacian 算子—cv2.Laplacian()

Laplacian 算子用于计算图像的二阶导数,常用于检测边缘和角点。

函数:cv2.Laplacian()

函数签名:

cv2.Laplacian(src, ddepth, ksize=1, scale=1, delta=0, borderType=cv2.BORDER_DEFAULT)

参数解释:

  • src:输入图像(通常是灰度图像)。
  • ddepth:目标图像的深度,常用 cv2.CV_16Scv2.CV_8U
  • ksize:卷积核的大小(常用值为 1、3、5、7)。
  • scale:缩放系数(默认值 1)。
  • delta:添加的偏移量(默认值 0)。
  • borderType:边界类型(通常使用 cv2.BORDER_DEFAULT)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值