首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Python去噪照片

用Python去噪照片
EN

Stack Overflow用户
提问于 2021-02-26 21:22:12
回答 2查看 245关注 0票数 0

我有下面的图片,这是一本旧书的扫描副本。我想消除背景中的噪音(这是一点红色),这是由于扫描的旧照片。

更新:

应用opencv之后,按照opencv医生中的参数设置,我将得到以下输出。

请帮我修一下这个。

我使用的代码:

代码语言:javascript
复制
import numpy as np
import cv2
from matplotlib import pyplot as plt

def display_image_in_actual_size(im_data):

    dpi = 80
    height, width, depth = im_data.shape

    # What size does the figure need to be in inches to fit the image?
    figsize = width / float(dpi), height / float(dpi)

    # Create a figure of the right size with one axes that takes up the full figure
    fig = plt.figure(figsize=figsize)
    ax = fig.add_axes([0, 0, 1, 1])

    # Hide spines, ticks, etc.
    ax.axis('off')

    # Display the image.
    ax.imshow(im_data, cmap='gray')

    plt.show()

img = cv2.imread('scan03.jpg')

dst = cv2.fastNlMeansDenoisingColored(img,None,10,10,7,21)

display_image_in_actual_size(img)
display_image_in_actual_size(dst)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-02-27 08:40:04

有接近阈值像素值的某些像素的颜色将受到影响,但这取决于任务,这里有一种解决方案,您可以将阈值调整为适合您的任务的值,还可以删除中值滤波器,或者减少sigma值(5)(如果它严重影响文本),您可能有一些不想要的噪声,但是文本是可读的。

代码语言:javascript
复制
import numpy as np
import matplotlib.pyplot as plt
import cv2
# Read Image
img = cv2.imread('input.jpg')
# BGR --> RGB
RGB = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
# BGR --> Gray
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# Set thresholds
th_white = 210
th_black = 85
# copy original gray
mask_white = gray.copy()
mask_black = gray.copy()
# Thresholding
mask_white[mask_white<th_white] = 0
mask_black[mask_black<th_black] = 0
mask_white[mask_white>=th_white] = 255
mask_black[mask_black>=th_black] = 255
# Median Filtering (you can remove if the text is not readable)
median_white = cv2.medianBlur(mask_white,5)
median_black = cv2.medianBlur(mask_black,5)
# Mask 3 channels
mask_white_3 = np.stack([median_white, median_white, median_white], axis=2)
mask_black_3 = np.stack([median_black, median_black, median_black], axis=2)
# Masking the image(in RGB)
result1 = np.maximum(mask_white_3, RGB)
result2 = np.minimum(mask_black_3, result1)
# Visualize the results
plt.imshow(result2)
plt.axis('off')
plt.show()
票数 1
EN

Stack Overflow用户

发布于 2021-02-26 21:32:34

opencv库具有双重的去噪函数。

您可以通过示例这里找到阅读。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66392964

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档