图像如下:
我使用以下代码:
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)
并显示以下内容:
所有颜色都太蓝的地方。我尝试了各种可能性来更改cv2.IMREAD_COLOR
的值,这些值可以在手册中,StackOverflow或网络上的其他地方找到,例如-1、0、1,cv2.COLOR_BGR2RGB
等,但是我没有能够获得正确的颜色。我尝试过cv2.COLOR_BGR2GRAY
,它甚至没有显示为灰度。我什至尝试过this answer,但是cv2.CV_LOAD_IMAGE_COLOR
似乎已经不存在了……
是否有正确的cv2.imdecode()
标志值或plt.imshow()的特殊颜色图,可以为我提供初始颜色?
答案 0 :(得分:2)
感谢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