openCV——梯度运算

梯度运算

import cv2
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
def cvshow(name, ndarray):

    cv2.imshow(name, ndarray)

    cv2.waitKey(0)
    cv2.destroyAllWindows()

Sobel算子

openCV——梯度运算

dst = cv2.Sobel( src, ddepth, dx, dy[,ksize[, scale[, delta[, borderType]]]] )

  • ddepth:代表输出图像的深度
  • dx和dy分别表示水平和竖直方向
  • ksize 代表 Sobel 核的大小。该值为-1 时,则会使用 Scharr 算子进行运算
  • scale 代表计算导数值时所采用的缩放因子,默认情况下该值是 1,是没有缩放的
  • delta 代表加在目标图像 dst 上的值,该值是可选的,默认为 0
  • borderType 代表边界样式
rec = cv2.imread("rectangle.png", cv2.IMREAD_GRAYSCALE)
cvshow("rec", rec)

rec_sobel_x = cv2.Sobel(rec, -1, 1, 0)
cvshow("sobel_x", rec_sobel_x)

从程序可以看出,当参数 ddepth 的值为-1 时,只得到了内层的两条边界。这是因为,黑色框减去左边的白色像素值为负数,其在显示时被调整为 0,如果处理的图像是 8 位图类型,则在 ddepth
的参数值为-1 时,意味着指定运算结果也是 8 位图类型,那么所有负数会自动截断为 0,发生
信息丢失。为了避免信息丢失,在计算时要先使用更高的数据类型 cv2.CV_64F,再通过取绝
对值将其映射为 cv2.CV_8U(8 位图)类型。所以,通常要将函数 cv2.Sobel()内参数 ddepth 的
值设置为”cv2.CV_64F”。

在 OpenCV 中,使用函数 cv2.convertScaleAbs()对参数取绝对值

dst = cv2.convertScaleAbs( src [, alpha[, beta]] )

  • dst 代表处理结果
  • src 代表原始图像
  • alpha 代表调节系数,该值是可选值,默认为 1
  • beta 代表调节亮度值,该值是默认值,默认为 0

rec_x = cv2.Sobel(rec, cv2.CV_64F, 1, 0)
rec_x = cv2.convertScaleAbs(rec_x)
rec_y = cv2.Sobel(rec, cv2.CV_64F, 0, 1)
rec_y = cv2.convertScaleAbs(rec_y)
res_sobel = cv2.addWeighted(rec_x, 0.5, rec_y, 0.5, 0)
cvshow("sobel", res_sobel)

Scharr算子

Scharr算子可以看成是sobel算子的改良版

openCV——梯度运算

; laplacian算子

openCV——梯度运算

lena = cv2.imread('lena.jpg',cv2.IMREAD_GRAYSCALE)
sobelx = cv2.Sobel(lena,cv2.CV_64F,1,0,ksize=3)
sobely = cv2.Sobel(lena,cv2.CV_64F,0,1,ksize=3)
sobelx = cv2.convertScaleAbs(sobelx)
sobely = cv2.convertScaleAbs(sobely)
sobelxy =  cv2.addWeighted(sobelx,0.5,sobely,0.5,0)

scharrx = cv2.Scharr(lena,cv2.CV_64F,1,0)
scharry = cv2.Scharr(lena,cv2.CV_64F,0,1)
scharrx = cv2.convertScaleAbs(scharrx)
scharry = cv2.convertScaleAbs(scharry)
scharrxy =  cv2.addWeighted(scharrx,0.5,scharry,0.5,0)

laplacian = cv2.Laplacian(lena,cv2.CV_64F)
laplacian = cv2.convertScaleAbs(laplacian)

res = np.hstack((sobelxy,scharrxy,laplacian))
cvshow("res",res)

Original: https://blog.csdn.net/D_Low/article/details/124220013
Author: One_T.
Title: openCV——梯度运算

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/645506/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球