利用Python对灰度图像进行不同模板算子的处理

导入cv2库和基本库,输入一张彩色图像:

import matplotlib.pyplot as plt
import cv2
import numpy as np
%matplotlib inline
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['font.size']=13
image = plt.imread(r"C:\Users\86182\9816.jpg_wh860.jpg")
para = np.array([0.299,0.587,0.114])
img = np.dot(image,para)
plt.imshow(image)

展示图片

进行sobel算子处理,水平和垂直边缘

plt.figure(figsize=(14,16))
sobelx = cv2.Sobel(img,cv2.CV_64F,1,0,ksize = 3)
sobelx = cv2.convertScaleAbs(sobelx)   # 转回uint8  
sobelxy = cv2.Sobel(img,cv2.CV_64F,1,1)
sobelxy = cv2.convertScaleAbs(sobelxy)   # 转回uint8  
plt.subplot(1,2,1)
plt.title('灰度图')
plt.imshow(img,cmap="gray")
plt.subplot(1,2,2)
plt.title('Soble水平边缘')
plt.imshow(sobelx,cmap="gray")
plt.figure(figsize=(14,16))
sobely = cv2.Sobel(img,cv2.CV_64F,0,1,ksize = 3)
sobely = cv2.convertScaleAbs(sobely)            # 转回uint8  
plt.subplot(1,2,1)
plt.title('灰度图')
plt.imshow(img,cmap="gray")
plt.subplot(1,2,2)
plt.title('Soble垂直边缘')
plt.imshow(sobely,cmap="gray")

 Roberts算子处理

# 读取图像
img = cv2.imread(r"C:\Users\86182\9816.jpg_wh860.jpg", cv2.COLOR_BGR2GRAY)
rgb_img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
# 灰度化处理图像
grayImage = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# Roberts 算子
kernelx = np.array([[-1, 0], [0, 1]], dtype=int)
kernely = np.array([[0, -1], [1, 0]], dtype=int)
x = cv2.filter2D(grayImage, cv2.CV_16S, kernelx)
y = cv2.filter2D(grayImage, cv2.CV_16S, kernely)
# 转 uint8 ,图像融合
absX = cv2.convertScaleAbs(x)
absY = cv2.convertScaleAbs(y)
Roberts = cv2.addWeighted(absX, 0.5, absY, 0.5, 0)

Prewitt 算子处理

# 读取图像
rgb_img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
# 灰度化处理图像
grayImage = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# Prewitt 算子
kernelx = np.array([[1,1,1],[0,0,0],[-1,-1,-1]],dtype=int)
kernely = np.array([[-1,0,1],[-1,0,1],[-1,0,1]],dtype=int)
x = cv2.filter2D(grayImage, cv2.CV_16S, kernelx)
y = cv2.filter2D(grayImage, cv2.CV_16S, kernely)
# 转 uint8 ,图像融合
absX = cv2.convertScaleAbs(x)
absY = cv2.convertScaleAbs(y)
Prewitt = cv2.addWeighted(absX, 0.5, absY, 0.5, 0)

canny算子处理

img = cv2.imread(r"C:\Users\86182\9816.jpg_wh860.jpg", 0)
edges = cv2.Canny(img, 100, 200)

 最后的效果图

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ChatGPT: 对于第一个问题,可以使用Python中的OpenCV库来实现。首先读取图像,然后使用cv2.cvtColor()函数将彩色图像转换为灰度图像,并使用cv2.imshow()函数显示图像。如果输入的是灰度图像,则可以使用cv2.cvtColor()函数将其转换为彩色图像,并使用cv2.imshow()函数显示图像。对于伪彩色处理,可以使用cv2.applyColorMap()函数实现。 对于第二个问题,可以使用Python中的OpenCV库来实现。对于图像算术运算,可以使用cv2.add()、cv2.subtract()、cv2.multiply()和cv2.divide()函数实现。对于灰度图像的几何运算,可以使用cv2.warpAffine()函数实现平移、旋转、放大和缩小。对于灰度变换,可以使用cv2.LUT()函数实现灰度变换函数,例如对比度、灰度求反、图像的均衡化等。对于彩色图像的三通道读取和显示,可以使用cv2.split()函数将图像分离为三个通道,并使用cv2.merge()函数将三个通道合并为彩色图像。 对于第三个问题,可以使用Python中的OpenCV库来实现。对于图像模板处理,可以使用cv2.filter2D()函数实现不同类型的模板处理,例如均值滤波、中值滤波、Sobel算子、Roberts算子、Prewwit算子和Laplace算子等。对于自定义处理模板,可以使用numpy数组来定义模板,并使用cv2.filter2D()函数实现平滑和锐化处理。对于频域处理,可以使用numpy.fft.fft2()函数实现傅里叶变换,使用numpy.fft.ifft2()函数实现反变换,使用cv2.magnitude()函数计算幅度谱,使用cv2.phase()函数计算相位谱,使用cv2.dft()函数实现巴特沃斯低通滤波和高通滤波,使用cv2.addWeighted()函数实现高频增强滤波。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值