opencv梯度的不同计算方法比较

本文探讨了OpenCV中不同的梯度计算方法,包括morphologyEx、Sobel、Scharr和Laplacian算子。针对Sobel算子在dx和dy同时为1时出现的异常现象进行了分析,提出可能是计算中相互抵消导致的问题。同时指出,Laplacian算子用于边缘检测,而morphologyEx提供的梯度适用于边界发现。Scharr算子在某些情况下比Sobel更优,但未做归一化处理。最后展示了不同方法在彩色和灰度图上的效果比较。
摘要由CSDN通过智能技术生成

主要内容

  1. morphologyEx操作使用MORPH_GRADIENT参数,即dilate(img)-erode(img)
  2. Sobel/Scharr分别对xy计算梯度求绝对值,再相加
  3. Laplacian算子,二阶导数,已经不是梯度了,也可以用于边缘检测
  4. Sobel算子同时对xy求梯度的问题
  5. Sobel算子ddepth选择CV_64F坐标转换和求和的先后问题

Sobel算子的一些问题

先从几个奇怪的现象说起,见代码

import cv2
import numpy as np

img = np.full((200,200), 255, dtype=np.uint8)
img[60:140,60:140] = 0
img[80:120,80:120] = 255

# ddepth使用浮点数,因为uint8处理不了梯度负数等情况,这个不再讨论,主要这里dx,dy都是1,是错误的!!!
sobel = cv2.Sobel(img, cv2.CV_64F, 1, 1)
# 转换成uint8,求绝对值
sobel0 = cv2.convertScaleAbs(sobel)

sobelx = cv2.Sobel(img, cv2.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值