基于opencv的python中3*3邻域平滑,中值去模糊处理

基于opencv的python中3*3邻域平滑,中值去模糊处理

调用numpy的zeros函数创建所需类型的3个数组,用于平滑,取中值和扩充之后的图片。然后用冒泡排序取得中间值完成中值处理,最后在一个窗口上显示。

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

img = cv2.imread('Fig0335.tif')  # 测试图片
H = img.shape[0]  #获取图片的高(像素点个数)
W = img.shape[1]  #获取图片的宽(像素点个数)

img3 = np.zeros((H, W, 3), np.uint8)  # 3*3邻域平滑后的图像
imgmid = np.zeros((H, W, 3), np.uint8)  # 3*3邻域内取中值的图像

tmpImg = np.zeros((H + 2, W + 2, 3), np.uint8)  # 扩充之后的图像
for i in range(H):
    for j in range(W):
        tmpImg[i + 1, j + 1] = img[i, j]   #将测试图片复制到扩充之后的图像中
        
for i in range(H):
    for j in range(W):
        S = []
        for x in range(3):
            for y in range(3):   #3*3邻域
                # S[x * 3 + y] = tmpImg[i + x, j + y, 0]
                S.append(tmpImg[i + x, j + y, 0])
        img3[i, j, 0] = sum(S) // 9  #取平均值
        img3[i, j, 1] = img3[i, j, 0]
        img3[i, j, 2] = img3[i, j, 0]
        # 冒泡排序,只要排到中间一个值,即4,因此x范围是8->3
        for x in range(8, 3, -1): #从8减少到3,每次减少1,因为每循环一次就排好一个数
            for y in range(x): 
                if S[y + 1] > S[y]: #小的数往后移
                    temp = S[y]
                    S[y] = S[y + 1]
                    S[y + 1] = temp
        imgmid[i, j, 0] = S[4]  #取中间值
        imgmid[i, j, 1] = imgmid[i, j, 0]
        imgmid[i, j, 2] = imgmid[i, j, 0]

# 原图
plt.subplot(1, 3, 1)        #将窗口分为1行三列,第1个子图
plt.axis('off')             #不显示坐标尺寸
plt.title('Original image') #第一幅图片标题
plt.imshow(img)             #绘制第一幅图片

# 3*3邻域
plt.subplot(1, 3, 2)
plt.axis('off')
plt.title('3*3 smoothing')
plt.imshow(img3)

# 邻域中值替换之后
plt.subplot(1, 3, 3)
plt.axis('off')
plt.title('Middle Value Replaced Image')
plt.imshow(imgmid)

plt.show()

一个运行截图(基于一本数字图像处理书:冈萨雷斯)

在这里插入图片描述

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值