美文网首页OpenCV
OpenCV--图像梯度处理

OpenCV--图像梯度处理

作者: Dayon | 来源:发表于2020-11-20 15:05 被阅读0次

图像梯度-Sobel(索贝尔)算子

  • cv2.Sobel(src, ddepth, dx, dy, ksize) 进行sobel算子计算
    参数说明:
    src:表示当前图片,
    ddepth:表示图片深度,这里使用cv2.CV_64F使得结果可以是负值,
    dx:表示x轴方向,
    dy:表示y轴方向, ksize表示移动方框的大小

  • cv2.convertScalerAbs(src) 将像素点进行绝对值计算
    参数说明:
    src:表示当前图片

sobel算子:分为x轴方向和y轴方向上的,
x轴方向上的算子如图中的Gx,将sober算子在图中进行平移,当前位置的像素值等于sobel算子与(当前位置与周边位置8个点)进行对应位置相乘并相加操作,作为当前位置的像素点(右减左)
y轴方向的算子如Gy, 对于x轴方向上,即左右两边的比较(下减上)

计算方程为:x轴: p3 - p1 + 2 * p6 - 2 * p4 + p9 - p7, 右边的像素值减去左边的像素值


import cv2
import matplotlib.pyplot as plt
img = cv2.imread('pie.png',cv2.IMREAD_GRAYSCALE)
sobelx = cv2.Sobel(img,cv2.CV_64F,1,0,ksize=3)# 1,0: 表示只算水平的,不算竖直的
sobelxx = cv2.convertScaleAbs(sobelx) #白到黑是正数,黑到白就是负数了,所有的负数会被截断成0,所以要取绝对值

sobely = cv2.Sobel(img,cv2.CV_64F,0,1,ksize=3)
sobelyy = cv2.convertScaleAbs(sobely)

# 分别计算x和y,再求和,融合的较好
sobelxy_1 = cv2.addWeighted(sobelxx,0.5,sobelyy,0.5,0) 
# 不建议直接计算,融合的不好
sobelxy_2 = cv2.Sobel(img,cv2.CV_64F,1,1,ksize=3)

# cv_show('pie',img)
cv2.imshow('sobelx',sobelx)
cv2.imshow('sobelxx',sobelxx)
cv2.imshow('sobely',sobely)
cv2.imshow('sobelyy',sobelyy)
cv2.imshow('sobelxy_1',sobelxy_1)
cv2.imshow('sobelxy_2',sobelxy_2)
cv2.waitKey(0)
cv2.destroyAllWindows()

白到黑是正数,黑到白就是负数了,所有的负数会被截断成0,所以要用convertScalerAbs取绝对值

注:图sobelx,右半边也有梯度,但是是从黑到白,所以为0(黑),所以看不出来。(图sobely的下半部分同理)

在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

Lena图像的sobel水平竖直方向的操作效果


图像梯度-Scharr算子与laplacian算子

laplacian (lɑ:'plɑ:siən) 拉普拉斯算子

laplacian算子计算方程为:p2 + p4 + p6 +p8 - 4 * p5

Scharr算子和Sobel算子的用法相同,Laplacian算子就不存在x y了

img = cv2.imread('lena.jpg',cv2.IMREAD_GRAYSCALE)
sobelx = cv2.Sobel(img,cv2.CV_64F,1,0,ksize=3)
sobely = cv2.Sobel(img,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(img,cv2.CV_64F,1,0)
scharry = cv2.Scharr(img,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(img,cv2.CV_64F)
laplacian = cv2.convertScaleAbs(laplacian)   

res = np.hstack((img,sobelxy,scharrxy,laplacian))
cv_show(res,'res')
image.png

相关文章

  • OpenCV--图像梯度处理

    图像梯度-Sobel(索贝尔)算子[https://img2018.cnblogs.com/i-beta/1617...

  • OpenCV--图像处理 图像阈值

    3、图像处理 图像阈值 thresh 通过对像素点与阈值的比较,当大于阈值或小于阈值时分别进行取值 ret, ds...

  • HOG特征

    图像处理之特征提取:HOG特征简单梳理 HOG 方向梯度直方图,这里分解为方向梯度与直方图。 一、方向梯度 梯度:...

  • 图像梯度与Sobel滤波器---OpenCV-Python开发指

    图像梯度 图像梯度计算的是图像变化的速度。对于图像的边缘部分,其灰度值变化较大,梯度值也较大;相反,对于图像中比较...

  • 2018-03-04~提纲

    图像的像素,频率,格式 灰度值处理,阈值 灰度直方图 灰度梯度图HOG 图像分割 平滑,去噪(中值滤波) 锐化~边...

  • 图像梯度

    图像梯度计算的是图像变化的速度。对于图像的边缘部分,其灰度值变化较大,梯度值也较大。一般情况下,图像梯度计算的是图...

  • Vectoraster for Mac(矢量图的栅格图案工具)

    Vectoraster for Mac是一个Mac平台上的图像处理工具,用于创建基于矢量的栅格模式和基于图像或梯度...

  • OpenCV--图像的形态学处理

    腐蚀与膨胀属于形态学操作,所谓的形态学,就是改变物体的形状,形象理解一些:腐蚀=变瘦膨胀=变胖主要是采用 cv2....

  • OpenCV--图像轮廓

    图像轮廓 Contours cv2.findContours(img,mode,method)img: 二值图像m...

  • Opencv-Python学习笔记十——图像梯度、边缘检测 Gr

    图像梯度 边缘检测 图像梯度,图像边界使用到的函数有: cv2.Sobel(), cv2.Schar(), cv2...

网友评论

    本文标题:OpenCV--图像梯度处理

    本文链接:https://www.haomeiwen.com/subject/udxdiktx.html