为什么通过 PIL 图像更模糊?

数据挖掘 美国有线电视新闻网 opencv 图像预处理
2021-10-10 19:04:05

我使用 PIL 库打开图像,然后稍后将其转换为数组以进行 DL 操作。但是我发现打开的图像与原始图像相比是模糊的。为什么图像是这样出来的?可以做些什么来解决它?如果 OpenCV 中存在可能的解决方案,那也将受到欢迎。

我也尝试使用 OpenCV,但我得到了一个断言错误,即

error: OpenCV(3.4.3) /io/opencv/modules/imgproc/src/resize.cpp:4044: error: (-215:Assertion failed) !ssize.empty() in function 'resize'

代码:

from PIL import Image
import numpy as np
import pandas as pd
import os
import cv2
import keras
from keras.models import Sequential
from keras.layers import Conv2D,MaxPooling2D,Dense,Flatten,Dropout
import matplotlib.pyplot as plt

image=Image.open("../content/cell_images/Parasitized/"+i)
size_image = image.resize((50, 50))
print("image")
plot(image,count)
print("resize image")
plot(size_image,count)

这是绘图的代码:

def plot(img, count):
    w=10
    h=10
    fig=plt.figure(figsize=(8, 8))
    img = np.random.randint(10, size=(h,w))
    fig.add_subplot(rows, columns, count)
    plt.imshow(img)
    plt.show()

在此处输入图像描述 在此处输入图像描述

2个回答

缺少某些可能包含线索的代码部分(例如,您的 plot 方法只会绘制随机噪声,因为它目前)。可能发生的情况是您在 matplotlib 中以比图像小得多的图形显示图像,因此 matplotlib 会自动将图像缩放到像素空间。

plt.imshow()方法可以带一个参数interpolation,它可以产生截然不同的效果。以下是它们的并排比较:

插值法

查看相关文档


我个人坚持使用 OpenCV 并cv2.imread()加载图像。您只需要注意(在使用 Tensorflow/Keras 的情况下)通道是第一个维度。ie (Channels, Height, Width)- 而 egplt.imread()将返回(Height, Width, Channels)

尝试指定重采样过滤器。默认过滤器(最近邻)速度很快,但结果不太好。

image=Image.open("../content/cell_images/Parasitized/"+i)
size_image = image.resize((50, 50),PIL.Image.LANCZOS)

文档链接:[1][2]