基本图像梯度

代码:

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

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐