1.cv2.imread(filename, flags)

参数:

filepath:读入imge的完整路径
flags:标志位,{cv2.IMREAD_COLOR,cv2.IMREAD_GRAYSCALE,cv2.IMREAD_UNCHANGED}
cv2.IMREAD_COLOR:默认参数,读入一副彩色图片,忽略alpha通道,可用1作为实参替代
cv2.IMREAD_GRAYSCALE:读入灰度图片,可用0作为实参替代
cv2.IMREAD_UNCHANGED:顾名思义,读入完整图片,包括alpha通道,可用-1作为实参替代
PS:alpha通道,又称A通道,是一个8位的灰度通道,该通道用256级灰度来记录图像中的透明度复信息,定义透明、不透明和半透明区域,其中黑表示全透明,白表示不透明,灰表示半透明

1.1基本使用:

另:cv2.imread()的基本属性:.shape,.size,.dtype

import cv2
#彩色图
img_color=cv2.imread('aima.jpg')
cv2.imshow('img_color',img_color)
#像素矩阵规格
print('color','\n',img_color.shape)
#像素点个数
print(img_color.size)
#图像数据格式
print(img_color.dtype)img_gray=cv2.imread('aima.jpg',0)
cv2.imshow('img_gray',img_gray)
print('gray','\n',img_gray.shape)
print(img_gray.size)
print(img_gray.dtype)img_unchange=cv2.imread('aima.jpg',-1)
cv2.imshow('img_unchange',img_unchange)
print('unchange','\n',img_unchange.shape)
print(img_unchange.size)
print(img_unchange.dtype)
cv2.waitKey(0)


shell输出如下:数据含义见代码注释,可以看到gray图像的像素矩阵是一维的,即单通道的

1.2进阶:
1.1.2 灰度1通道图可读取为3通道彩色图
import cv2
img_gray=cv2.imread('aima.jpg',0)
#取灰度图保存
img_change=cv2.imwrite('aima_gray.jpg',img_gray)
cv2.imshow('img_gray',img_gray)
#按3通道彩色图读入灰度图像
img_color=cv2.imread('aima_gray.jpg',1)
print('color','\n',img_color.shape,'\n',img_color.size)
cv2.imshow('img_color',img_color)
cv2.waitKey(0)


shell输出:

可以看到,当我们将color图像确实是三通道的,即灰度图读取为3通道图

1.1.2.imread()读入的是BGR排列的图像,并不是RGB

很多博客对此都有介绍,但都没提到一点:既然opencv读入图像时默认的是BGR排列,为什么我们用imshow()来对BGR排列的像素矩阵显示时图像是正常的或者说图像颜色是RGB的???

这点迷惑了我好久,其实:
opencv遵循的是bmp位图格式,即存储阵列为BGR,即我们看到的图像颜色是RGB的,但其实其存储是按BGR来的,这是其内部特有的,换句话说,只有我们将通道按BGR排列,将像素矩阵转为图片时才会看到RGB位图

关于RGB位图的存储阵列如下:

经此我们已经知道,cv2.imread()读取的像素矩阵内是BGR排列,那么我们来验证一下:

首先要知道:plt读取图片时默认通道阵列时RGB,即将按RGB排列的像素矩阵传给plt让其读取,我们才能通过plt来看到RGB位图,这又可总结为:plt读取的是什么通道阵列,它用于显示的位图就是什么阵列颜色的

import cv2
import matplotlib.pyplot as plt
img=cv2.imread('aima.jpg')
cv2.waitKey(0)plt.subplot(1,1,1);plt.imshow(img);plt.axis('off');plt.title('bgr')
plt.show()

如上代码,img是cv2.imread()按默认读入的,即BGR阵列,后plt直接对该BGR进行读入、显示
结果如图:我们可以看到,BGR阵列的像素矩阵被plt显示为BGR颜色位图

很多时候我们用cv2读入的图像需要拿给其他库进行处理,这些库大多默认BGR阵列,这时怎么办呢?一种方法是使用cv2.cvtColor()函数

cv2.cvtColor(p1,p2)
上面说到说到imread()读入的是BGR格式图像,在plt等其他库对像素矩阵进行处理时遵循的都是RGB顺序,那么,我们可以使用cv2.cvtColor(p1,p2)对图像颜色空间进行转换。cv2.cvtColor(p1,p2) 是颜色空间转换函数,p1是需要转换的图片,p2是转换成何种格式。
cv2.COLOR_BGR2RGB 将BGR格式转换成RGB格式
cv2.COLOR_BGR2GRAY 将BGR格式转换成灰度图片
cv2.COLOR_BGR2HSV 将BGR转为HSV模式

实验如下:

import cv2
import matplotlib.pyplot as plt
img=cv2.imread('aima.jpg')img_rgb=cv2.cvtColor(img,cv2.COLOR_BGR2RGB)plt.subplot(1,1,1);plt.imshow(img_rgb);plt.axis('off');plt.title('bgr')
plt.show()

CV2逐步学习-1.imread()详解+cvtColor()颜色空间转换相关推荐

  1. halcon例程讲解_跟我学机器视觉-HALCON学习例程中文详解-开关引脚测量

    跟我学机器视觉-HALCON学习例程中文详解-开关引脚测量 This example program demonstrates the basic usage of a measure object. ...

  2. python流程控制语句-python学习 流程控制语句详解

    ###################### 分支语句 python3.5 ################ #代码的缩进格式很重要 建议4个空格来控制 #根据逻辑值(True,Flase)判断程序的 ...

  3. 深度学习开发环境调查结果公布,你的配置是这样吗?(附新环境配置) By 李泽南2017年6月26日 15:57 本周一(6 月 19 日)机器之心发表文章《我的深度学习开发环境详解:Te

    深度学习开发环境调查结果公布,你的配置是这样吗?(附新环境配置) 机器之心 2017-06-25 12:27 阅读:108 摘要:参与:李泽南.李亚洲本周一(6月19日)机器之心发表文章<我的深 ...

  4. IOS学习之UINavigationController详解与使用(一)添加UIBarButtonItem

    转:http://blog.csdn.net/totogo2010/article/details/7681879 1.UINavigationController导航控制器如何使用 UINaviga ...

  5. 随笔分类 - HALCON学习例程中文详解

    from: https://www.cnblogs.com/chita/category/563492.html 随笔分类 - HALCON学习例程中文详解 HALCON学习例程中文详解 跟我学机器视 ...

  6. IOS开发学习笔记-----UILabel 详解

    IOS开发学习笔记-----UILabel 详解 01 //创建uilabel 02 UILabel *label1 = [[UILabel alloc] initWithFrame:CGRectMa ...

  7. Java学习软件安装详解

    Java学习软件安装详解 一直对Java的学习马马虎虎,新换的电脑,在重装java软件时遇到很多问题,安装了半天,想着以后自己也可能用到,所以写下来,以供大家参考. 1.准备工作 我的电脑:windo ...

  8. mysql dba系统学习-数据库事务详解

    mysql dba系统学习-数据库事务详解 上个星期去面试数据库管理员的工作,笔试通过之后就是直接的面试,他问了我一个问题,叫我介绍哈数据库的事务的看法和理解,但是不知所错的没有章法的乱答一气,唉唉, ...

  9. wringPi 初始化GPIO 为上拉_敏矽微电子Cortex-M0学习笔记04-GPIO详解及应用实例

    前面我们已经对敏矽微电子的基于cortex m0内核的ME32F030R8T6的基本功能做了介绍,然后详细讲解了开发环境MDK的安装,pack包的安装,工程的建立及程序的仿真,紧接着讲解了ME32F0 ...

最新文章

  1. Keil C语言数据类型,KeilC的指针类型
  2. Leetcode:114. Flatten Binary Tree to Linked List
  3. 多伦多一人学计算机科学本科,加拿大多伦多大学计算机科学Essay要求
  4. 讲讲排序(C++描述)
  5. 使用Packet.dll和npf.sys实现原始数据包的发送和接收
  6. 虚拟化运维平台云安对政府机构的解决方案
  7. 不一样的ZTree,权限树.js插件
  8. 逆波兰表达式[栈 C 语言 实现]
  9. windows10系统的电脑如何设置密码?
  10. 报警服务器物理内存,服务器内存使用率优化
  11. aftershokz蓝牙搜不到_iphone xr黑屏无法开机怎么办?iphonexr蓝牙连不上怎么办?
  12. SourceTree Win10 安装不成功解决过程记录
  13. 如何使用 MagSafe 外接电池?
  14. Matlab 谢尔宾斯基三角形
  15. Holder 方式的单例
  16. Kotlin 实战翻译 —— 仿微信图片选择开源库ImagePicker
  17. WeOS 微信手机操作系统
  18. 非正式协议与正式协议的区别
  19. Python之正则表达式匹配电话号码和邮箱
  20. c语言个人财务管理系统

热门文章

  1. 剖析中移动未来之路之二
  2. Ai 文字正确描边 文字描边
  3. C++基础编程题(27)输入一个数字,为其高,一个符号*,输出该符号组成的平行四边形形状
  4. Algorithm Gossip: 最大访客数
  5. Oracle数据导入遇到1658的报错
  6. 嫁给爱情,然后笑着结婚
  7. 学英语(20200312)
  8. MongoDB权威指南读书笔记——CRUD
  9. 计算机二级抽题规律,计算机二级考试抽题规律计算机二级考试题及答案.doc
  10. android 家庭理财软件 需求分析,基于Android的家庭理财通的设计与实现.docx