手机版
你好,游客 登录 注册
背景:
阅读新闻

Python中cv2库和matplotlib库色彩空间排布不一致

[日期:2016-07-20] 来源:Linux社区  作者:pakfahome [字体: ]

今天在Python中读如图片时发现以下问题:

1.在from matplotlib import pyplot as plt之后,再import cv2

cv2.imshow()不能正常使用,还不知道是什么原因

目前我的解决办法是,使用cv2读入图像,然后调用plt.imshow()显示图像,不使用cv2.imshow()显示图像

2.OpenCV的cv2库中的色彩空间和matplotlib库中的色彩空间的排布方式是不一样的

cv2中的色彩排列是(b,g,r),而matplotlib库中的排列方式是(r,g,b)

由于第一个问题的存在,我只能写了两个程序来证明两个库的色彩排列方式不一样

源图为(图片来源于网络):

使用opencv读取并使用cv2.imshow显示

import numpy as np
import cv2

img = cv2.imread('/home/zh/pic/1.jpg')
while(True):
    cv2.imshow('cv2.imshow', img)
    k = cv2.waitKey(0) & 0xFF
    if k == 27:
        cv2.destroyAllWindows()
        break
复制代码

结果显示正确,如示:

但如果使用matplotlib中的pyplot.imshow(),颜色则反过来了,即r空间和b空间的色彩对调了,如下示:

import numpy as np
import cv2
from matplotlib import pyplot as plt

img_bgr = cv2.imread('/home/zh/pic/1.jpg')
img_rgb = np.zeros(img_bgr.shape, img_bgr.dtype)
img_rgb[:,:,0] = img_bgr[:,:,2]
img_rgb[:,:,1] = img_bgr[:,:,1]
img_rgb[:,:,2] = img_bgr[:,:,0]

plt.subplot(121),plt.imshow(img_bgr)
plt.xticks([]),plt.yticks([])
plt.subplot(122),plt.imshow(img_rgb)
plt.xticks([]),plt.yticks([])
plt.show()

直接将cv2.imread()读取的图像放入plt.imshow()中,色彩不正确,但如果将cv2.imread()读取的图像的r通道和b通道的值对换一下,就正确了,下左图为plt.imshow()直接显示cv2.imread()读取的图像的结果,下右图为色彩空间对调后的结果

这两个问题,希望大家注意。

OpenCV官方教程中文版(For Python) PDF  http://www.linuxidc.com/Linux/2015-08/121400.htm

Ubuntu Linux下安装OpenCV2.4.1所需包 http://www.linuxidc.com/Linux/2012-08/68184.htm

Ubuntu 12.04 安装 OpenCV2.4.2 http://www.linuxidc.com/Linux/2012-09/70158.htm

CentOS下OpenCV无法读取视频文件 http://www.linuxidc.com/Linux/2011-07/39295.htm

Ubuntu 12.04下安装OpenCV 2.4.5总结 http://www.linuxidc.com/Linux/2013-06/86704.htm

Ubuntu 10.04中安装OpenCv2.1九步曲 http://www.linuxidc.com/Linux/2010-09/28678.htm

基于QT和OpenCV的人脸识别系统 http://www.linuxidc.com/Linux/2011-11/47806.htm

[翻译]Ubuntu 14.04, 13.10 下安装 OpenCV 2.4.9  http://www.linuxidc.com/Linux/2014-12/110045.htm

OpenCV的详细介绍请点这里
OpenCV的下载地址请点这里

本文永久更新链接地址http://www.linuxidc.com/Linux/2016-07/133361.htm

linux
相关资讯       Matplotlib 
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数

       

评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款