今天在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()读取的图像的结果,下右图为色彩空间对调后的结果

这两个问题,希望网友们注意

Python中cv2库和matplotlib库色彩空间排布不一致的更多相关文章

  1. python中常⽤的excel模块库

    python中常用的excel模块库&安装方法 openpyxl openpyxl是⼀个Python库,用于读取/写⼊Excel 2010 xlsx / xlsm / xltx / xltm⽂ ...

  2. python中模块,包,库的概念

    模块:就是.py文件,里面定义了一些函数和变量,需要的时候就可以导入这些模块. 包:在模块之上的概念,为了方便管理而将文件进行打包.包目录下第一个文件便是 __init__.py,然后是一些模块文件和 ...

  3. python中的轻量级定时任务调度库:schedule

    提到定时任务调度的时候,相信很多人会想到芹菜celery,要么就写个脚本塞到crontab中.不过,一个小的定时脚本,要用celery的话太“重”了.所以,我找到了一个轻量级的定时任务调度的库:sch ...

  4. python中模块,包,库

    模块:就是.py文件,里面定义了一些函数和变量,需要的时候就可以导入这些模块. 包:在模块之上的概念,为了方便管理而将文件进行打包.包目录下第一个文件便是 __init__.py,然后是一些模块文件和 ...

  5. Python中 模块、包、库

    模块:就是.py文件,里面定义了一些函数和变量,需要的时候就可以导入这些模块. 包:在模块之上的概念,为了方便管理而将文件进行打包.包目录下第一个文件便是 __init__.py,然后是一些模块文件和 ...

  6. python中模块、包、库的区别和使用

    模块:就是.py文件,里面定义了一些函数和变量,需要的时候就可以导入这些模块. 包:在模块之上的概念,为了方便管理而将文件进行打包.包目录下第一个文件便是 __init__.py,然后是一些模块文件和 ...

  7. (数据科学学习手札135)tenacity:Python中最强大的错误重试库

    本文示例代码及文件已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 我们在编写程序尤其是与网络请求相关的程序, ...

  8. (数据科学学习手札137)orjson:Python中最好用的json库

    本文示例代码及文件已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 大家好我是费老师,我们在日常使用Pytho ...

  9. 【python】numpy库和matplotlib库学习笔记

    Numpy库 numpy:科学计算包,支持N维数组运算.处理大型矩阵.成熟的广播函数库.矢量运算.线性代数.傅里叶变换.随机数生成,并可与C++/Fortran语言无缝结合.树莓派Python v3默 ...

随机推荐

  1. 九度oj 题目1363:欢乐斗地主

    题目描述: 如果大家玩过欢乐斗地主这个游戏,就一定知道有一个具有“提示”功能的按钮.如果你不知道你现在手里的牌有没有比上家大的牌,并且你也懒得去一张一张地看你手中的牌.这时候你就可以点“提示”按钮,系 ...

  2. 爬取本blog的所有标题和链接

    #coding=utf-8 from bs4 import BeautifulSoup import urllib.request for i in range(1,54): url = " ...

  3. iOS学习笔记43-Swift(三)类

    一.Swift的类class 作为一门面向对象语言,类也是Swift的非常重要的类型,我们先来看下一个简单的类 //Swift中一个类可以不继承于任何其他基类,那么此类本身就是一个基类 class P ...

  4. Codeforces 899D Shovel Sale

    题目大意 给定正整数 $n$($2\le n\le 10^9$). 考虑无序整数对 $(x, y)$($1\le x,y\le n, x\ne y$). 求满足 「$x+y$ 结尾连续的 9 最多」的 ...

  5. LaTeX:毕设模版设计问题1 各级标题编号设为黑体

    我用'titlesec'宏包设计各级标题格式指定字体为黑体,结果标题编号仍为Times New Roman .

  6. input和textarea区别

    1. input是单行文本,textarea是多行文本,可以带滚动条2. input的value放在标签里面 <input type="text" value="b ...

  7. Django自定义User模型和登录验证

    用户表已存在(与其他App共用),不能再使用Django内置的User模型和默认的登录认证.但是还想使用Django的认证框架(真的很方便啊). 两个步骤: 1)自定义Use模型,为了区分系统的Use ...

  8. ckeditor小记

    widget 只要创建都会执行 init函数,可以绑定事件,但是如果widget释放了,其上绑定的时间也就没有了

  9. GridView从行寻找到该控件,以及从该控件获知该行

    原文发布时间为:2008-08-01 -- 来源于本人的百度文章 [由搬家工具导入] GridView从行寻找到该控件: protected void Button3_Click(object sen ...

  10. llinux 定时器 转载自 http://blog.chinaunix.net/uid-11848011-id-96374.html

    这篇文章主要记录我在试图解决如何尽可能精确地在某个特定的时间间隔执行某项具体任务时的思路历程,并在后期对相关的API进行的归纳和总结,以备参考. 问题引出 很多时候,我们会有类似“每隔多长时间执行某项 ...