python实现opencv学习十五:图像梯度
基本图像梯度代码:import cv2import numpy as npmoon = cv2.imread("moon.jpg", 0)row, column = moon.shapemoon_f = np.copy(moon)moon_f = moon_f.astype("float")gradient = np.zeros((row, column))for x in range(row -
·
基本图像梯度
代码:
import cv2
import numpy as np
moon = cv2.imread("moon.jpg", 0)
row, column = moon.shape
moon_f = np.copy(moon)
moon_f = moon_f.astype("float")
gradient = np.zeros((row, column))
for x in range(row - 1):
for y in range(column - 1):
gx = abs(moon_f[x + 1, y] - moon_f[x, y])
gy = abs(moon_f[x, y + 1] - moon_f[x, y])
gradient[x, y] = gx + gy
sharp = moon_f + gradient
sharp = np.where(sharp < 0, 0, np.where(sharp > 255, 255, sharp))
gradient = gradient.astype("uint8")
sharp = sharp.astype("uint8")
cv2.imshow("moon", moon)
cv2.imshow("gradient", gradient)
cv2.imshow("sharp", sharp)
cv2.waitKey()
结果:
备注:
参考资料:https://blog.csdn.net/saltriver/article/details/78987096
Sobel算子
代码:
# -*- coding=GBK -*-
import cv2 as cv
# 图像梯度基本原理:https://blog.csdn.net/saltriver/article/details/78987096 增强轮廓边缘
# 图像梯度:索贝尔算子
def sobel_image(image):
image = cv.cvtColor(image, cv.COLOR_BGR2GRAY)
cv.imshow("before", image)
grad_x = cv.Sobel(image, cv.CV_32F, 1, 0) # x方向导数
grad_y = cv.Sobel(image, cv.CV_32F, 0, 1) # y方向导数
gradx = cv.convertScaleAbs(grad_x)
grady = cv.convertScaleAbs(grad_y)
cv.imshow("label_X", gradx) # 颜色变化在水平分层
cv.imshow("label_Y", grady) # 颜色变化在垂直分层
gradxy = cv.addWeighted(gradx, 0.5, grady, 0.5, 0)
cv.imshow("combine", gradxy)
src = cv.imread("fengling.jpg")
sobel_image(src)
cv.waitKey(0)
cv.destroyAllWindows()
结果:
备注:
cv.convertScaleAbs()函数的作用是将32位浮点型转换作为无符号整型
Sobel算子参考资料:https://blog.csdn.net/sunny2038/article/details/9170013
Scharr算子
代码:
# -*- coding=GBK -*-
import cv2 as cv
import numpy as np
# 图像梯度基本原理:https://blog.csdn.net/saltriver/article/details/78987096 增强轮廓边缘
#图像梯度:scharr算子:增强边缘
def scharr_image(image):
image = cv.cvtColor(image, cv.COLOR_BGR2GRAY)
cv.imshow("GRAY", image)
grad_x = cv.Scharr(image, cv.CV_32F, 1, 0)#x方向导数
grad_y = cv.Scharr(image, cv.CV_32F, 0, 1)#y方向导数
gradx = cv.convertScaleAbs(grad_x)
grady = cv.convertScaleAbs(grad_y)
cv.imshow("label_X", gradx)#颜色变化在水平分层
cv.imshow("label_Y", grady)#颜色变化在垂直分层
gradxy = cv.addWeighted(gradx, 0.5, grady, 0.5, 0)
cv.imshow("combine", gradxy)
src = cv.imread("fengling.jpg")
cv.imshow("before", src)
scharr_image(src)
cv.waitKey(0)
cv.destroyAllWindows()
结果:
备注:
scharr算子参考资料:https://blog.csdn.net/JimmyFu0055/article/details/83719438
Laplacian算子
代码:
# -*- coding=GBK -*-
import cv2 as cv
import numpy as np
# 图像梯度基本原理:https://blog.csdn.net/saltriver/article/details/78987096 增强轮廓边缘
# 拉普拉斯算子
def lapalian_image(image):
dst = cv.Laplacian(image, cv.CV_32F)
lpls = cv.convertScaleAbs(dst)
cv.imshow("after", lpls)
src = cv.imread("fengling.jpg")
cv.imshow("before", src)
lapalian_image(src)
cv.waitKey(0)
cv.destroyAllWindows()
结果:
备注:
laplacion算子参考资料:https://blog.csdn.net/sunny2038/article/details/9188441
更多推荐
所有评论(0)