Prewitt,Sobel算子,Canny算子,LoG算子

Prewitt,两种大小的Sobel算子,不同参数的Canny算子,LoG算子

免费Gpt,低调使用:Sider -- ChatGPT Sidebar, GPT-4, Draw & Web access

运行样例

Prewitt,Sobel算子,Canny算子代码

import cv2
import matplotlib
import numpy as np
import matplotlib.pyplot as plt
matplotlib.rc("font",family='SimHei')
# 读取图像
image = cv2.imread('lifePhoto02.png', 0)

# 边缘检测 - Prewitt算子
prewitt_x = cv2.Sobel(image, cv2.CV_64F, 1, 0, ksize=3)
prewitt_y = cv2.Sobel(image, cv2.CV_64F, 0, 1, ksize=3)
prewitt = np.sqrt(prewitt_x**2 + prewitt_y**2)

# 边缘检测 - Sobel算子
sobel_x1 = cv2.Sobel(image, cv2.CV_64F, 1, 0, ksize=3)
sobel_y1 = cv2.Sobel(image, cv2.CV_64F, 0, 1, ksize=3)
sobel1 = np.sqrt(sobel_x1**2 + sobel_y1**2)

sobel_x2 = cv2.Sobel(image, cv2.CV_64F, 1, 0, ksize=5)
sobel_y2 = cv2.Sobel(image, cv2.CV_64F, 0, 1, ksize=5)
sobel2 = np.sqrt(sobel_x2**2 + sobel_y2**2)

# 边缘检测 - Canny算子
canny1 = cv2.Canny(image, 50, 100)
canny2 = cv2.Canny(image, 100, 200)

# LoG算子
gaussian = cv2.GaussianBlur(image, (3, 3), 0)
log = cv2.Laplacian(gaussian, cv2.CV_64F)
# 显示图像
plt.figure(figsize=(12, 12))

plt.subplot(3, 3, 1)
plt.imshow(image, cmap='gray')
plt.title('原始图像')

plt.subplot(3, 3, 2)
plt.imshow(prewitt, cmap='gray')
plt.title('Prewitt算子')

plt.subplot(3, 3, 3)
plt.imshow(sobel1, cmap='gray')
plt.title('Sobel算子 (3x3)')

plt.subplot(3, 3, 4)
plt.imshow(sobel2, cmap='gray')
plt.title('Sobel算子 (5x5)')

plt.subplot(3, 3, 5)
plt.imshow(canny1, cmap='gray')
plt.title('Canny算子 (50, 100)')

plt.subplot(3, 3, 6)
plt.imshow(canny2, cmap='gray')
plt.title('Canny算子 (100, 200)')

plt.subplot(2, 3, 5)
plt.imshow(log, cmap='gray')
plt.title('LoG算子')
plt.show()

Log算子代码

import cv2
import numpy as np
import matplotlib.pyplot as plt

def LoG_edge_detection(image, kernel_size, sigma):
    # 高斯滤波
    blurred = cv2.GaussianBlur(image, (kernel_size, kernel_size), sigma)

    # 拉普拉斯变换
    laplacian = cv2.Laplacian(blurred, cv2.CV_64F)

    # 边缘检测
    edges = cv2.threshold(np.abs(laplacian), 0.1, 255, cv2.THRESH_BINARY)[1]

    return edges

# 读取图像
image = cv2.imread('lifePhoto02.png', 0)  # 以灰度模式读取图像

# 调用LoG边缘检测函数
edges = LoG_edge_detection(image, kernel_size=5, sigma=1.4)

# 将图像的通道顺序从灰度转换为RGB
image_rgb = cv2.cvtColor(image, cv2.COLOR_GRAY2RGB)
edges_rgb = cv2.cvtColor(edges.astype(np.uint8), cv2.COLOR_GRAY2RGB)

# 显示结果
plt.subplot(121)
plt.imshow(image_rgb)
plt.title('Original Image')

plt.subplot(122)
plt.imshow(edges_rgb)
plt.title('LoG Edges')

plt.show()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值