当前位置:网站首页>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语言 || 杂
- 【win10系统安装deepin双系统重启进不了win系统解决办法】
- 搭建自己的以图搜图系统 (一):10 行代码以图搜图
- 数字孪生万物可视 | 联接现实世界与数字空间
- 碎片化时间真的适合学习吗?
- Chapter 01 Installation and use of MySQL under Linux [1. MySQL Architecture] [MySQL Advanced]
- 2.1寸旋钮屏结合6.86寸串口屏助力集成灶智能升级|启明智显
- 【学习笔记】NOIP模拟赛
- 成都 | 转行软件测试,从零收入到月薪过万,人生迎来新转折...
- 测试内推 | 阿里飞猪、百度、58(招聘)、知乎、欢忻网络、百果园、阿里(Lazada)、深智城、元戎启行招人啦
猜你喜欢
随机推荐
error TS1219: Experimental support for decorators解决
MarkBERT
洪九果品、百果园抢滩港股,卖水果是门好生意吗?
Postgresql中的pg_memory_barrier_impl和C的volatile
不堆概念、换个角度聊多线程并发编程
牛客网剑指offer刷题练习之重构二叉树
Really touch the fish and lead the teacher: The programmer brother works 10 minutes a day with an annual salary of 570,000. I broke the defense...
For key in object traversal of objects encountered problems
工作9年了!
支持向量机SVM
小程序使用npm包
H265码流RTP封装方式详解
Neo4j Open Source NoSQL Database
R语言时间序列数据提取:使用xts包的last函数提取时间序列中最后面10天的数据(last 10 day)
低代码三部曲之未来
MySQL 中的反斜杠 \\,真是太坑了
R语言时间序列数据提取:使用xts包的last函数提取时间序列中最后面两周的数据(last 2 week)
function arguments
LeetCode 1047 删除字符串中的所有相邻重复项
“加价”都换不来安全保障,雷克萨斯LM之殇,到底是谁的错?








