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 图具有相同的颜色地图比例