计算机视觉开源库OpenCV梯度之Sobel算子

Sobel算子是像素图像边缘检测中最重要的算子之一,在机器学习、数字媒体、计算机视觉等信息科技领域起着举足轻重的作用。在技术上,它是一个离散的一阶差分算子,用来计算图像亮度函数的一阶梯度之近似值。在图像的任何一点使用此算子,将会产生该点对应的梯度矢量或是其法矢量。

#!/usr/bin/env python3

import cv2

image = cv2.imread(r"meinv.jpg")
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
cv2.imshow("Gray Image", gray)

gX = cv2.Sobel(gray, ddepth=cv2.CV_64F, dx=1, dy=0)
gY = cv2.Sobel(gray, ddepth=cv2.CV_64F, dx=0, dy=1)

gX = cv2.convertScaleAbs(gX)
gY = cv2.convertScaleAbs(gY)

sobelCombined = cv2.addWeighted(gX, 0.5, gY, 0.5, 0)

cv2.imshow("gX Image", gX)
cv2.imshow("gY Image", gY)
cv2.imshow("sobelCombined Image", sobelCombined)

cv2.waitKey(0)
cv2.destroyAllWindows()

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
边缘检测是计算机视觉中一个重要的任务,它可以用于图像分割、物体检测、运动跟踪等应用中。OpenCV是一个开源计算机视觉,其中包含了多种边缘检测算法,其中最常用的是Canny算法。 Canny算法是一种基于梯度的边缘检测算法,它具有较高的准确性和较低的误检率。它的主要步骤包括: 1. 高斯滤波:使用高斯滤波器对图像进行平滑处理,以去除噪声。 2. 计算梯度:使用Sobel算子计算图像的水平和垂直梯度,以确定边缘的方向和强度。 3. 非极大值抑制:在梯度方向上对每个像素进行比较,保留局部最大值,并将其他像素抑制。 4. 双阈值处理:将像素分为强边缘、弱边缘和非边缘三类,其中强边缘表示边缘的确存在,弱边缘表示可能存在边缘,但需要进一步验证,非边缘则表示不是边缘。可以根据设定的高低阈值将像素分为三类。 5. 边缘连接:将弱边缘与强边缘进行连接,形成完整的边缘。 OpenCV中提供了cv2.Canny()函数来实现Canny算法,具体代码如下: ``` import cv2 import numpy as np img = cv2.imread('image.jpg',0) edges = cv2.Canny(img,100,200) cv2.imshow('Original',img) cv2.imshow('Edges',edges) cv2.waitKey(0) cv2.destroyAllWindows() ``` 其中,第一个参数是输入图像,第二个参数和第三个参数是高低阈值,可以根据需要进行调整。运行结果如下图所示: ![canny](https://img-blog.csdn.net/20180323132009151?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYWNhbmhpbGx5/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/q/70)

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值