当前位置:   article > 正文

OpenCV 图像退化与增强

OpenCV 图像退化与增强

退化

滤波

img_averaging=cv2.blur(img2,(3,3)) #均值滤波
img_median = cv2.medianBlur(img2,3) #中值滤波
  • 1
  • 2

高斯模糊

result = cv2.GaussianBlur(source, (11,11), 0)
  • 1

高斯噪声

def add_noise_Guass(img, mean=0, var=0.01):  # 添加高斯噪声
    img = np.array(img / 255, dtype=float)# 将原始图像的像素值进行归一化,除以255使得像素值在0-1之间
    noise = np.random.normal(mean, var ** 0.5, img.shape)
    #0.01的0.5次幂,ctrl点击normal函数可见参数
    #给出均值为loc,标准差为scale的高斯随机数(场)
    '''
    numpy.random.normal(loc=0.0, scale=1.0, size=None)
    loc:float
    此概率分布的均值(对应着整个分布的中心centre)
    scale:float
    此概率分布的标准差(对应于分布的宽度,scale越大越矮胖,scale越小,越瘦高)
    size:int or tuple of ints
    输出的shape,默认为None,只输出一个值
    '''
    out_img = img + noise# 将噪声和原始图像进行相加得到加噪后的图像
    if out_img.min() < 0:
        low_clip = -1
    else:
        low_clip = 0
        out_img = np.clip(out_img, low_clip, 1.0)#clip函数将元素的大小限制在了low_clip和1之间了,小于的用low_clip代替,大于1的用1代替
        out_img = np.uint8(out_img * 255)# 解除归一化,乘以255将加噪后的图像的像素值恢复
    return out_img
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

椒盐噪声

def sp_noise(image, amount):

    output = image.copy()
    threshold = 1 - amount#传入的参数,设置一个阙值
    #amount 越大,白色越多
    for i in range(image.shape[0]):#shape[0]表示图片高
        for j in range(image.shape[1]):#图片宽
            rdm = random.random()#取0到1之间的浮点数
            if rdm < amount: #如果随机数小于参数,那么像素点取黑色
                output[i][j] = 0  #亮度0%,取黑色
            elif rdm > threshold:
                output[i][j] = 255#取白色

    return output
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

增强

修复破损

import cv2
import numpy as np
# 读取照片
image = cv2.imread('old_photo.jpg')
# 将图像转换为灰度图
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# 应用高斯模糊来减少图像噪声
blurred = cv2.GaussianBlur(gray, (5, 5), 0)
# 使用Canny边缘检测器识别边缘
edges = cv2.Canny(blurred, 50, 150)
# 使用膨胀操作将边缘连接在一起形成轮廓
dilated = cv2.dilate(edges, None, iterations=2)
# 在原始图像上绘制轮廓,以便于可视化结果
result = cv2.inpaint(image, dilated, (3, 3), cv2.INPAINT_TELEA)
# 显示修复后的照片
cv2.imshow('Result', result)
cv2.waitKey(0)
cv2.destroyAllWindows()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

先读取照片,并将其转换为灰度图。然后,我们使用高斯模糊减少图像噪声,并使用Canny边缘检测器识别边缘。接下来,我们通过膨胀操作将边缘连接在一起形成轮廓,以便识别损坏区域。最后,我们使用OpenCV的inpaint函数来修复损坏区域,并将结果显示出来。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/611582
推荐阅读
相关标签
  

闽ICP备14008679号