我在python中尝试了很多方法来读取,打开和保存PNG文件以复制原始数组数据以进行进一步的图像处理,其中一些方法的大小为40 MB。但在读取图像期间,图像本身会降级,在此过程中质量和尺寸会降低。所以我不能再使用该数据阵列进行进一步操作[例如过滤]和进一步收集数据[例如psnr,entropy]因为已阅读的内容不再是原始图像。
使用Pil。
from PIL import Image
i = Image.open('shoes.png')
i.show()
Original Image| note I saved it in jpeg but the quality looks like it. 40 mb in png format
Opened image from "i.show", 18.1 mb in png format
与python CV相同
import cv2
img = cv2.imread('shoes.png' )
它产生蓝色的图像。
所以我没理解。这些库是否对图像的大小有限制?因为我尝试使用PNG格式来保证图像质量没有损失,但在读取图像时,会降低图像质量。
您能否回答有关此问题的问题,或者您能否提出一种更好的方法来获取numpy数组,大型原始图像或PNG图像的数据,而不会在读取文件和保存文件时降低图像质量。
注意:此外,当我尝试在较小的图像文件上使用PIL代码时,它根本不会降低图像质量。
答案 0 :(得分:0)
我认为问题不在于处理大型PNG文件。这是一个脚本,它生成一个与图像大小相同的数组,将其保存到PNG文件,然后使用PIL/Pillow将其读回。输出显示在脚本之后。结果是从文件读取的数据与原始数组相同。
要将numpy数组写入文件,我使用的是一个名为numpngw
的库。您也可以使用PIL / Pillow或PyPNG代替 .
.
.
var client = new MyWebViewClient();
WebView web = FindViewById<WebView>(Resource.Id.webView1);
web.SetWebViewClient(client);
.
.
.
class MyWebViewClient : WebViewClient {
public override void OnReceivedHttpAuthRequest(WebView view, HttpAuthHandler handler, string host, string realm) {
handler.Proceed(username, password);
}
}
。
numpngw
输出:
from __future__ import print_function
import numpy as np
from numpngw import write_png
from PIL import Image
# For reproducibility...
np.random.seed(123)
# Generate random data to use for the image.
data = np.random.randint(0, 255, size=(3072, 4608, 3)).astype(np.uint8)
# Put a small white block in the corner
data[:3, :3, :] = 255
# Take a look at the red channel of a small subset of the image.
print(data[:4, :12, 0])
# Write the array to a PNG file. I use numpngw.write_png; PIL and PyPNG
# are alternatives that could be used.
write_png("foo.png", data)
# Open the file using PIL (actually Pillow) and create a numpy
# array containing the image.
img = Image.open("foo.png")
a = np.array(img)
# Take a look at the red channel of a small subset of array. It should
# be the same as the previous output.
print()
print(a[:4, :12, 0])
compare_str = "equal" if np.all(data == a) else "not equal"
print("\nRound-trip result: the arrays are %s." % compare_str)