【问题标题】:Wrong colours with cv2.imdecode (python opencv)cv2.imdecode 错误的颜色(python opencv)
【发布时间】:2019-02-28 20:47:07
【问题描述】:

我尝试显示位于此处的图像: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)

它会显示这个:

所有颜色都太蓝了。我已经尝试了各种可能性来更改 cv2.IMREAD_COLOR 与手册中找到的值,在 StackOverflow 或网络上的其他地方,如 -1、0、1、cv2.COLOR_BGR2RGB,......但我无法获得正确的颜色。我试过cv2.COLOR_BGR2GRAY,它甚至没有以灰度显示。我什至试过this answer,但cv2.CV_LOAD_IMAGE_COLOR似乎不存在了……

是否有正确的 cv2.imdecode() 标志值,或者 plt.imshow() 的特殊颜色图,它会给我初始颜色?

【问题讨论】:

  • matplotlib 需要 RGB 排序,而 OpenCV(反常)使用 BGR。我认为您需要使用cv2.cvtColor() 在两者之间进行转换。
  • 太棒了!!!我没有意识到这一点!队友的欢呼声。有用。我现在发布回复感谢您的回答。 :)

标签: python-3.x opencv cv2


【解决方案1】:

感谢 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

【讨论】:

  • 有趣!我猜这只是影响显示,如果我训练一个模型使用BGR,不会有区别吧?
  • 我想不会。但是,如果您想使用 OpenCV 正确显示它,请注意颜色编码。 :)
  • @Vimos 如果你用 RGB 图像训练一个网络并给它一个 BGR,那么你肯定会期望更差的准确性。反之亦然(使用 BGR 图像进行训练并为其提供 RGB 图像)。
猜你喜欢
  • 1970-01-01
  • 2017-11-17
  • 2016-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多