plt.imshow()显示图片有色差

在使用pynq时遇到plt.imshow()显示opencv读取的图片颜色不正常的问题,经发现是因为两者处理颜色格式不同。解决方案是将bgr格式转换为rgb,可以通过frame=frame_bgr[:,:,[2,1,0]]或frame=frame_bgr[:,:,::-1]实现。对于灰度图片,直接使用plt.imshow(gray,cmap='gray')即可正确显示。
摘要由CSDN通过智能技术生成

学习记录


在用pynq的时候,使用plt.imshow()显示opencv的图片中发现,显示的图片颜色不正常,明明是红色的,显示的颜色确实蓝色,测试硬件也没有发现异常。
经过百度发现,plt和opencv显示图片的格式不一样,opencv的图片显示是bgr格式的,而plt显示图片是rgb格式的。

解决方案

  1. 显示彩色图片
import numpy as np
import cv2

videoIn = cv2.VideoCapture(0)

# frame_in_w = 640
# frame_in_h = 480
# videoIn.set(cv2.CAP_PROP_FRAME_WIDTH, frame_in_w);
# videoIn.set(cv2.CAP_PROP_FRAME_HEIGHT, frame_in_h);

print("capture device is open: " + str(videoIn.isOpened()))
%matplotlib inline 

from matplotlib import pyplot as plt
import numpy as np

ret, frame_bgr = videoIn.read()
# frame为rgb而plt.imshow()显示的是bgr
frame = frame_bgr[:,:,[2,1,0]]
plt.imshow(frame2, cmap=None)
plt.show()

关键在于frame = frame_bgr[:,:,[2,1,0]]将bgr转换成rgb
或者frame = frame_bgr[:,:,::-1]也有同样的效果
2.显示灰度图片

%matplotlib inline 

from matplotlib import pyplot as plt
import numpy as np


ret, frame_bgr = videoIn.read()
# frame为rgb而plt.imshow()显示的是bgr
gray = cv2.cvtColor(frame_bgr, cv2.COLOR_BGR2GRAY)
plt.imshow(gray, cmap='gray')
plt.show()

在显示灰度图片时,不需要进行格式变换,但要注意多加一个参数plt.imshow(gray, cmap='gray')

参考文献

http://www.zzvips.com/article/85490.html
https://www.pianshen.com/article/5326320971/
https://blog.csdn.net/u013608424/article/details/80117178

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值