cv2.imdecode颜色错误(python opencv)

Mat*_*att 2 opencv python-3.x cv2

我尝试显示位于此处的图像:http : //skyservice.pha.jhu.edu/DR12/ImgCutout/getjpeg.aspx?ra=118.70299999999999&dec=45.721000000000004&width=10&height=10&scale=0.6

图像如下所示:

在此处输入图片说明

我使用以下代码:

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)
Run Code Online (Sandbox Code Playgroud)

它显示如下:

在此处输入图片说明

所有颜色都太蓝的地方。我尝试过各种可能的方法来更改cv2.IMREAD_COLOR手册中,StackOverflow或网上其他位置(例如-1、0、1,...)中的值,cv2.COLOR_BGR2RGB但是我一直无法获得正确的颜色。我尝试过cv2.COLOR_BGR2GRAY,它甚至没有显示为灰度。我什至尝试了这个答案,但cv2.CV_LOAD_IMAGE_COLOR似乎不再存在了……

cv2.imdecode()flag 是否有正确的值,或者plt.imshow()的特殊颜色图会为我提供初始颜色?

Mat*_*att 6

感谢Mark Setchell,现在可以使用了。我引用他的话:

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
Run Code Online (Sandbox Code Playgroud)