示例图片:
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()
效果:
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]])
和laplacian算子得出来的效果一样,因为laplcian算子自己的kernel就是这个。。
2.选用kernel = np.array([[1,1,1],[1,-8,1],[1,1,1]])
这样的话效果更显著,据弹幕说,这等于先把图像锐化,再做下一步处理。