当前位置:网站首页>cv2 imread()函数[通俗易懂]
cv2 imread()函数[通俗易懂]
2022-07-29 18:51:00 【全栈程序员站长】
大家好,又见面了,我是你们的朋友全栈君。
Reason
这两天学习OpenCV-Python时,也就是cv2库,读取图像时不时出现和预料之外的结果。于是作者从源头来考究一下cv2.imread(filename, flags)
Result
这里参考文章cv2.imread(filename, flags) 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级灰度来记录图像中的透明度复信息,定义透明、不透明和半透明区域,其中黑表示全透明,白表示不透明,灰表示半透明
Experiemt
这里用到的两个img:MyPic.png,MyPicGray.png
当然需要先导入cv2,并接下来会使用的一个自定义fun()
import cv2
# ouput img properties
def funOutputImgProperties(img):
print("properties:shape:{},size:{},dtype:{}".format(img.shape,img.size,img.dtype))首先对彩色图MyPic测试:imread分别以三种flag读取MyPic,并输出图像参数: 代码如下:
# 3 channels img loads
# 读入完整图片,含alpha通道
img3ChaCom = cv2.imread('MyPic.png', cv2.IMREAD_UNCHANGED)
cv2.imshow('IMREAD_UNCHANGED+Color',img3ChaCom)
cv2.waitKey()
funOutputImgProperties(img3ChaCom)
# 读入彩色图片,忽略alpha通道
img3Cha=cv2.imread('MyPic.png',cv2.IMREAD_COLOR)
cv2.imshow('IMREAD_COLOR+Color', img3Cha)
cv2.waitKey()
funOutputImgProperties(img3Cha)
#彩色图片按,灰度图片读入
img3ChaGray=cv2.imread('MyPic.png',cv2.IMREAD_GRAYSCALE)
cv2.imshow('IMREAD_GRAYSCALE+Color', img3ChaGray)
cv2.waitKey()
funOutputImgProperties(img3ChaGray)输出信息: 窗口图像
控制台输出:
properties:shape:(500, 500, 3),size:750000,dtype:uint8
properties:shape:(500, 500, 3),size:750000,dtype:uint8
properties:shape:(500, 500),size:250000,dtype:uint8和作者预想的一样,IMREAD_UNCHANGED和IMREAD_COLOR标志位的img读取自然是3 channels彩图,而使用IMREAD_GRAYSCALE标志位时,imread将彩色图像直接读取为灰色,B\G\R的三通道变成了单通道。图片像素改变:500X500X3->500X500X1 接下来,考察灰度图MyPicGray:imread分别以三种flag读取MyPic,并输出图像参数: 代码如下:
# 1 channel img loads
# 读入完整图片,含alpha通道
img1ChaCom = cv2.imread('MyPicGray.png', cv2.IMREAD_UNCHANGED)
cv2.imshow('IMREAD_UNCHANGED+Gray', img1ChaCom)
cv2.waitKey()
funOutputImgProperties(img1ChaCom)
# 读入彩色图片,忽略alpha通道
img1ChaColor = cv2.imread('MyPicGray.png', cv2.IMREAD_COLOR)
cv2.imshow('IMREAD_COLOR+Gray', img1ChaColor)
cv2.waitKey()
funOutputImgProperties(img1ChaColor)
# 彩色图片按,灰度图片读入
img1Cha = cv2.imread('MyPicGray.png', cv2.IMREAD_GRAYSCALE)
cv2.imshow('IMREAD_GRAYSCALE+Gray', img1Cha)
cv2.waitKey()
funOutputImgProperties(img1Cha)输出信息: 窗口图像
控制台输出:
properties:shape:(500, 500),size:250000,dtype:uint8
properties:shape:(500, 500, 3),size:750000,dtype:uint8
properties:shape:(500, 500),size:250000,dtype:uint8结合输出图像和控制台输出我们可以看到,三个imgshow的输出都是展现的灰度图,但是imread的flag为IMREAD_COLOR时,图像实际上时三通道的彩色图。 进一步的,我们直接输出IMREAD_COLOR+Gray和IMREAD_GRAYSCALE+Gray的像素矩阵。可以看到IMREAD_COLOR+Gray确实时三通道的[ [ [ ] ] ]像素矩阵,IMREAD_GRAYSCALE+Gray是[ [ ] ]。
[[[246 246 246]
[246 246 246]
[246 246 246]
...
[246 246 246]
[246 246 246]
[246 246 246]]
[[246 246 246]
[246 246 246]
[246 246 246]
...
[246 246 246]
[246 246 246]
[246 246 246]]
[[246 246 246]
[246 246 246]
[246 246 246]
...
[246 246 246]
[246 246 246]
[246 246 246]]
...
[[246 246 246]
[246 246 246]
[246 246 246]
...
[246 246 246]
[246 246 246]
[246 246 246]]
[[246 246 246]
[246 246 246]
[246 246 246]
...
[246 246 246]
[246 246 246]
[246 246 246]]
[[246 246 246]
[246 246 246]
[246 246 246]
...
[246 246 246]
[246 246 246]
[246 246 246]]]
[[246 246 246 ... 246 246 246]
[246 246 246 ... 246 246 246]
[246 246 246 ... 246 246 246]
...
[246 246 246 ... 246 246 246]
[246 246 246 ... 246 246 246]
[246 246 246 ... 246 246 246]]Conclusion
收获:除了深入了解imread函数的参数,更多的是知道3 channels colored img可以直接读取为1 channel grayscale img;而1 channel grayscale img也可以读取为3 channels colored img。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/129610.html原文链接:https://javaforall.cn
边栏推荐
- C陷阱与缺陷
- Test push | Ali Fliggy, Baidu, 58 (recruitment), Zhihu, Huanxin Network, Baiguoyuan, Ali (Lazada), Shenzhicheng, Yuanrong Qixing are recruiting
- Typescript类功能混合(mixin)使用,将多个类中功能合并到一个对象
- UDPNM测试技术分享
- R语言时间序列数据提取:使用xts包的first函数提取时间序列中最前面两周的数据(first 2 week)
- 牛客网刷题记录 || 指针
- 关于高考选志愿
- Chengdu | Changed to software testing, from zero income to over 10,000 monthly salary, a new turning point in life...
- MarkBERT
- ECCV 2022 | AirDet:无需微调的小样本目标检测方法
猜你喜欢
随机推荐
碎片化时间真的适合学习吗?
Setting right:0 after sticky positioning does not take effect
R语言时间序列数据可视化: 使用plot函数可视化单序列时间序列数据、多序列时间序列数据并指定不同时间序列的线条类型(lty)
Low code of the trilogy
uniapp H5 跳转应用外页面
PX4模块设计之十四:Event设计
记录一个相当坑爹的WSL局域网访问问题
H265码流RTP封装方式详解
手势密码解锁微信小程序项目源码
不堆概念、换个角度聊多线程并发编程
如何防止订单重复支付?
2.1寸旋钮屏结合6.86寸串口屏助力集成灶智能升级|启明智显
String类型_static成员_动态内存分配_拷贝构造函数_const关键字_友元函数与友元类
AI 通过了图灵测试,科学家反应冷淡:“很棒,但没必要”
【学习笔记】NOIP模拟赛
第02章 MySQL的数据目录【1.MySQL架构篇】【MySQL高级】
Win11网络不稳定怎么办?Win11连接wifi频繁掉线的解决方法
大疆MID 360
在宇宙中心五道口上班,是怎样一种体验
数字孪生万物可视 | 联接现实世界与数字空间




![[数学]必备基本知识](/img/ac/f3552ef31948e1c31ce692fa87a796.png)




