python-3.x - 当 imdecode 图像 Python 时,OpenCV 剥离 sRGB 配置文件

标签 python-3.x opencv image-processing libpng srgb

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

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

我收到了 libpng 警告:

libpng warning: iCCP: known incorrect sRGB profile

如何在 imread 之前删除 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)

我收到同样的警告

最佳答案

使用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)

使用skimage:

import cv2
from skimage import io

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

如果您使用 OpenCV cv2.imshow 得到奇怪的显示,请记住 OpenCV 不显示 alpha channel 。

关于python-3.x - 当 imdecode 图像 Python 时,OpenCV 剥离 sRGB 配置文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50528389/

相关文章:

python-3.x - 使用感叹号运行 bash 命令不适用于 python 提示符

python - OpenCV (Python) 视频子图

opencv - 在 Raspberry Pi 2 上使用 TBB 编译 OpenCV 3

c++ - OpenCV:一般可以使用哪些方法或二值化技术来提取低质量和低对比度图像的前景?

java - 是否可以使用调用 Java 方法(回调)的 JNI native 线程来更新 Swing UI 组件?

python - 在 C 中调用 Python-3 函数

python - 如何格式化 float 的输出,使其在小数点后有两位?

python - 在 python 中使用列表进行递归

c++ - 获取 OpenCV Mat 中唯一像素值的列表

python - Python/OpenCV 中的对比度拉伸(stretch)