OpenCV 在图像解码时剥离 sRGB 配置文件 Python

kab*_*hra 1 opencv image-processing libpng srgb python-3.x

我正在阅读从互联网上获取的图像,然后立即读入 python 中的 OpenCV,如下所示:

# read in image as bytes from page
image = page.raw_stream.read()
frame = cv2.imdecode(np.asarray(bytearray(image)), 0)
Run Code Online (Sandbox Code Playgroud)

我收到 libpng 警告:

libpng warning: iCCP: known incorrect sRGB profile
Run Code Online (Sandbox Code Playgroud)

如何在读取之前剥离 sRGB 配置文件?人们建议在阅读 png 文件之前通过 imagemagick 来完成此操作,但这对我来说是不可能的。有没有办法直接在Python中做到这一点?

编辑:

如果我使用https://uploadfiles.io/m1w2l上的文件运行并使用以下代码,我无法获取下面答案中的代码来解决我的问题:

import cv2
import numpy as np

with open('data/47.png', 'rb') as test:
   image = np.asarray(bytearray(test.read()), dtype="uint8")
   image = cv2.imdecode(image, cv2.IMREAD_COLOR)
Run Code Online (Sandbox Code Playgroud)

我收到同样的警告

zin*_*rod 5

使用urllib

import cv2
import urllib

resp = urllib.request.urlopen('https://i.imgur.com/QMPkIkZ.png')
image = np.asarray(bytearray(resp.read()), dtype="uint8")
image = cv2.imdecode(image, cv2.IMREAD_COLOR)
Run Code Online (Sandbox Code Playgroud)

使用skimage

import cv2
from skimage import io

image = io.imread('https://i.imgur.com/QMPkIkZ.png')
image = cv2.cvtColor(image, cv2.COLOR_RGBA2BGRA)
Run Code Online (Sandbox Code Playgroud)

如果使用 OpenCV 得到奇怪的显示cv2.imshow,请记住 OpenCV 不显示 Alpha 通道。