matplotlib imshow扭曲颜色[重复]

Posted

技术标签:

【中文标题】matplotlib imshow扭曲颜色[重复]【英文标题】:matplotlib imshow distorting colors [duplicate] 【发布时间】:2018-11-10 20:26:55 【问题描述】:

我尝试使用 matplotlib.pyplot 中的 imshow 函数,它可以完美地显示灰度图像。当我尝试表示 rgb 图像时,它会改变颜色,显示出更蓝的颜色。

看一个例子:

import cv2
import matplotlib.pyplot as plt
lena=cv2.imread("lena.jpg")
plt.imshow(lena)
plt.show()

生成的图像类似于this

虽然原图是this

如果它与颜色图有关,有什么方法可以使它与 rgb 图像一起使用?

【问题讨论】:

【参考方案1】:

这对我有用:

plt.imshow(lena[:,:,::-1]) # RGB-> BGR

同样的想法但更好更健壮的方法是使用@rayryeng提出的"ellipsis":

plt.imshow(lena[...,::-1])

【讨论】:

你也可以lena[...,::-1]。开头的省略号自动收集最后一个之前的所有维度。 @rayryeng 是的。谢谢! @rayryeng 啊,我现在才看到你的评论***.com/questions/50630825/… 我认为这应该归功于你。如果您将其发布为答案,我将删除我的。 @rayryeng 谢谢!我是为了好玩。所有这些代表都是为了肾上腺素。 :D。我以前经常回答,但工作和生活都阻碍了……不过,我期待着获得 100k 代表。 I want that swag!.【参考方案2】:

OpenCV 表示 BGR 中的图像,而不是我们期望的 RGB。由于它的顺序相反,因此您倾向于在图像中看到蓝色。 尝试使用以下行(代码中的注释下方)从 BGR 转换为 RGB:

import cv2
import matplotlib.pyplot as plt
lena=cv2.imread("lena.jpg")
#plt.imshow(lena)
#plt.axis("off")
#Converts from BGR to RGB
plt.imshow(cv2.cvtColor(lena, cv2.COLOR_BGR2RGB))
plt.show()

【讨论】:

您也可以使用 NumPy 语法自己反转通道:image[...,::-1] 这绝对是另一种选择。由于使用的是OpenCV,我认为引入一个相关的颜色转换函数会很有用。 当然,事实上,如果您想留在 OpenCV 空间中,那会更加冗长,但是您自己反转通道可以减少开销。这取决于用例。如果您打算重复执行此操作,那么切片可能会更好,但如果您只执行此操作一次,则对 cvtColor 的调用更加明确。无论哪种方式,都很好地解决了问题! 确实如此。还有,谢谢!

以上是关于matplotlib imshow扭曲颜色[重复]的主要内容,如果未能解决你的问题,请参考以下文章

在函数'cv :: imshow'中读取和扭曲图像(-215:断言失败)size.width> 0 && size.height> 0 [重复]

matplotlib imshow - 默认颜色归一化

设置两个 matplotlib imshow 图具有相同的颜色地图比例

同一个 imshow matplotlib 中的两个不同颜色的颜色图

matplotlib imshow

Python matplotlib imshow