• Python3与OpenCV3.3 图像处理(十七)--图像梯度


    一、什么是图像梯度

    可以把图像看成二维离散函数,图像梯度其实就是这个二维离散函数的求导:
    图像梯度: G(x,y) = dx i + dy j;
    dx(i,j) = I(i+1,j) - I(i,j);
    dy(i,j) = I(i,j+1) - I(i,j);
    其中,I是图像像素的值(如:RGB值),(i,j)为像素的坐标。
    图像梯度一般也可以用中值差分:
    dx(i,j) = [I(i+1,j) - I(i-1,j)]/2;
    dy(i,j) = [I(i,j+1) - I(i,j-1)]/2;
    图像边缘一般都是通过对图像进行梯度运算来实现的。

    图像梯度的最重要性质是,梯度的方向在图像灰度最大变化率上,它恰好可以反映出图像边缘上的灰度变化
    上面说的是简单的梯度定义,其实还有更多更复杂的梯度公式。(来源百度)

    二、示例代码

    import cv2 as cv
    import numpy as np
    
    def sobel(img):
        """索贝尔算子"""
        grad_x=cv.Sobel(img,cv.CV_32F,1,0)
        grad_y=cv.Sobel(img,cv.CV_32F,0,1)
        gradx=cv.convertScaleAbs(grad_x)
        grady = cv.convertScaleAbs(grad_y)
        cv.imshow("x",gradx)
        cv.imshow("y",grady)
    
        gradxy=cv.addWeighted(gradx,0.5,grady,0.5,0)
        cv.imshow("grad",gradxy)
    
    def scharr(img):
        """某些边缘差异很小的情况下使用"""
        grad_x = cv.Scharr(img, cv.CV_32F, 1, 
  • 相关阅读:
    浅谈Charles —— 青花瓷
    jdbc
    装饰者模式
    java可变参数
    简单日历
    DVD管理系统
    图片拷贝
    时间输出
    java基础小知识
    jQuery HTML
  • 原文地址:https://www.cnblogs.com/gangzhucoll/p/12778285.html
Copyright © 2020-2023  润新知