opencv学习笔记(12)图像梯度

示例图片:opencv学习笔记(12)图像梯度_第1张图片

1.sobel算子

原理(侵删):OpenCV3学习笔记——Sobel算子解析

# coding=UTF-8
import cv2 as cv
import numpy as np

def sobel_demo(image):
    grad_x = cv.Sobel(image,cv.CV_32F,1,0)
    grad_y = cv.Sobel(image,cv.CV_32F,0,1)
    gradx = cv.convertScaleAbs(grad_x)
    grady = cv.convertScaleAbs(grad_y)
    cv.imshow("gradinet-x",gradx)
    cv.imshow("gradient-y",grady)

    gradxy = cv.addWeighted(gradx,0.5,grady,0.5,0)
    cv.imshow("gradient",gradxy)

scr = cv.imread("quebangirl.jpg")
sobel_demo(scr)
cv.waitKey(0)
cv.destroyAllWindows()

效果:

2.scharr算子

原理以及与sobel算子的差异(侵删):图像梯度—scharr算子
听网课的时候,听老师说,scharr的效果比sobel算子强,是“进阶版的sobel”。

# coding=UTF-8
import cv2 as cv
import numpy as np

def scharr_demo(image):
    grad_x = cv.Scharr(image,cv.CV_32F,1,0)
    grad_y = cv.Scharr(image,cv.CV_32F,0,1)
    gradx = cv.convertScaleAbs(grad_x)
    grady = cv.convertScaleAbs(grad_y)
    cv.imshow("gradinet-x",gradx)
    cv.imshow("gradient-y",grady)
    gradxy = cv.addWeighted(gradx,0.5,grady,0.5,0)
    cv.imshow("gradient",gradxy)
   
scr = cv.imread("quebangirl.jpg")
scharr_demo(scr)
cv.waitKey(0)
cv.destroyAllWindows()

效果(确实增强了不少嗷):

3.laplacian算子

原理(侵删):OpenCV-Python教程(7、Laplacian算子)
一阶导对应sobel算子,二阶导对应laplacian算子

#coding=UTF-8
import cv2 as cv
import numpy as np


def laplacian_demo(image):
    dst = cv.Laplacian(image,cv.CV_32F)
    lpls =cv.convertScaleAbs(dst)
    cv.imshow("laplacian_demo",lpls)


scr = cv.imread("quebangirl.jpg")
laplacian_demo(scr)
cv.waitKey(0)
cv.destroyAllWindows()

效果:
opencv学习笔记(12)图像梯度_第2张图片

4.自定义kernel的laplacian算子(这个名字可能存误)

这个是完全看网课老师说的,所以就没去搜原理什么的。

# coding=UTF-8
import cv2 as cv
import numpy as np


def custom_demo(image):
    kernel = np.array([[0,1,0],[1,-4,1],[0,1,0]])
    dst = cv.filter2D(image,cv.CV_32F,kernel=kernel)
    lpls = cv.convertScaleAbs(dst)
    cv.imshow("laplacian_demo",lpls)


scr = cv.imread("quebangirl.jpg")
custom_demo(scr)
cv.waitKey(0)
cv.destroyAllWindows()

效果:
1.选用kernel = np.array([[0,1,0],[1,-4,1],[0,1,0]])opencv学习笔记(12)图像梯度_第3张图片
和laplacian算子得出来的效果一样,因为laplcian算子自己的kernel就是这个。。
2.选用kernel = np.array([[1,1,1],[1,-8,1],[1,1,1]])
opencv学习笔记(12)图像梯度_第4张图片
这样的话效果更显著,据弹幕说,这等于先把图像锐化,再做下一步处理。

你可能感兴趣的:(opencv学习)