Неправильные цвета с помощью cv2.imdecode (python opencv) - PullRequest
0 голосов
/ 25 сентября 2018

Я пытаюсь отобразить изображение, расположенное здесь: http://skyservice.pha.jhu.edu/DR12/ImgCutout/getjpeg.aspx?ra=118.70299999999999&dec=45.721000000000004&width=10&height=10&scale=0.6

Изображение выглядит так:

enter image description here

Я используюэтот код:

import matplotlib.pyplot as plt
import numpy as np
import urllib
import cv2

url = 'http://skyservice.pha.jhu.edu/DR12/ImgCutout/getjpeg.aspx?ra=118.70299999999999&dec=45.721000000000004&width=10&height=10&scale=0.6'

def url_to_image(url):
    resp = urllib.request.urlopen(url)
    image = np.asarray(bytearray(resp.read()), dtype="uint8")
    image = cv2.imdecode(image, cv2.IMREAD_COLOR)
    return image

img = url_to_image(url)
plt.imshow(img)

И он отображает это:

enter image description here

Где все цвета слишком синие.Я пробовал различные возможности изменить cv2.IMREAD_COLOR со значениями, найденными в руководстве, в StackOverflow или где-либо еще в сети, например -1, 0, 1, cv2.COLOR_BGR2RGB, ... но я не смог получитьправильные цвета.Я пробовал cv2.COLOR_BGR2GRAY, он даже не показывал в серой шкале.Я даже пытался этот ответ , но cv2.CV_LOAD_IMAGE_COLOR, кажется, больше не существует ...

Есть ли правильное значение флага cv2.imdecode() или специальная цветовая карта plt.imshow (), который дал бы мне начальные цвета?

1 Ответ

0 голосов
/ 25 сентября 2018

Спасибо Марку Сетчеллу, теперь все работает.Я цитирую его:

matplotlib требует RGB упорядочения, тогда как OpenCV (неверно) использует BGR

Следовательно, правильный код -

def url_to_image(url):
    resp = urllib.request.urlopen(url)
    image = np.asarray(bytearray(resp.read()), dtype="uint8")
    imageBGR = cv2.imdecode(image, cv2.IMREAD_COLOR)
    imageRGB = cv2.cvtColor(imageBGR , cv2.COLOR_BGR2RGB)
    return image
...