cv2.imdecode (python opencv) 颜色错误
Wrong colours with cv2.imdecode (python opencv)
图像是这样的:
我使用这个代码:
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
,使用手册、Whosebug 或网络上其他地方找到的值,例如 -1、0、1、cv2.COLOR_BGR2RGB
,...但我还没有能够得到正确的颜色。我试过cv2.COLOR_BGR2GRAY
,它甚至没有显示灰度。我什至尝试了 this answer,但是 cv2.CV_LOAD_IMAGE_COLOR
似乎不再存在了...
是否有 cv2.imdecode()
标志的正确值,或 plt.imshow() 的特殊颜色图,这会给我初始颜色?
感谢 Mark Setchell,现在可以使用了。我引用他的话:
matplotlib
requires RGB
ordering whereas OpenCV (perversely) uses 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
图像是这样的:
我使用这个代码:
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
,使用手册、Whosebug 或网络上其他地方找到的值,例如 -1、0、1、cv2.COLOR_BGR2RGB
,...但我还没有能够得到正确的颜色。我试过cv2.COLOR_BGR2GRAY
,它甚至没有显示灰度。我什至尝试了 this answer,但是 cv2.CV_LOAD_IMAGE_COLOR
似乎不再存在了...
是否有 cv2.imdecode()
标志的正确值,或 plt.imshow() 的特殊颜色图,这会给我初始颜色?
感谢 Mark Setchell,现在可以使用了。我引用他的话:
matplotlib
requiresRGB
ordering whereas OpenCV (perversely) usesBGR
因此,正确的代码是
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