作为其中一项任务的一部分,我正在使用以下代码从亚马逊网络服务S3下载一个图像并将其存储在本地临时文件夹中:
def capturing_image(img):
res_img = []
try:
res_img = Image.open(BytesIO(img))
res_img.verify()
print("Valid Image")
res_img = Image.open(BytesIO(img))
b, g, r = res_img.split()
res_img = Image.merge('RGB', (r, g, b))
res_img = np.array(res_img)
except Exception as ext:
print("Invalid Image with Error: ",ext)
return res_img
S3ActualImage_file = getS3ActualImage(image_path)
actual_image = capturing_image(S3ActualImage_file.content)问题是它正在改变图像的颜色。下面是我的实际镜像和下载镜像:
实际图像:

捕获图像后

如何保持图像的原始颜色?
发布于 2019-11-19 18:15:19
您错误地交换了RGB - BGR通道的顺序。
事实上,您可以注意到,在您的图像中,所有的红色都变成了蓝色。根据经验,每次你的输出看起来很奇怪,因为你期望的是红色的东西变成了蓝色的,或者反之亦然,你很容易就搞乱了通道的顺序。
之所以会发生这种情况,是因为在拆分时假设图像处于BGR中,但随后却以相反的顺序堆叠。
b, g, r = res_img.split()
res_img = Image.merge('RGB', (r, g, b))以相同的顺序合并应该可以解决这个问题。
b, g, r = res_img.split()
res_img = Image.merge('RGB', (b, g, r))https://stackoverflow.com/questions/58931403
复制相似问题