OpenCV strip sRGB профиль при кодировании изображения Python - PullRequest
0 голосов
/ 25 мая 2018

Я читаю изображения, которые я получаю из Интернета, а затем сразу же читаю в OpenCV на python, как показано ниже:

# 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

Как я могу удалить профиль sRGB перед imread?Люди предлагают сделать это с помощью imagemagick на png-файлах перед их чтением, но для меня это невозможно.Разве нет возможности сделать это в python напрямую?

EDIT:

Я не могу получить код в ответе ниже, чтобы исправить мою проблему, если я запускаю его с файлом в 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)

Я получаю то же предупреждение

1 Ответ

0 голосов
/ 25 мая 2018

Использование 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 неотображать альфа-каналы.

...