cv2 imread()函数[通俗易懂]

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_GRAYSC

大家好,又见面了,我是你们的朋友全栈君。

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 imread()函数[通俗易懂]MyPic.png:500×500, 24bpp

cv2 imread()函数[通俗易懂]MyPicGray.png:500×500, 8bpp

        当然需要先导入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)

输出信息:
    窗口图像


cv2 imread()函数[通俗易懂]

cv2 imread()函数[通俗易懂]

cv2 imread()函数[通俗易懂]

    控制台输出:

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)

输出信息:
    窗口图像


cv2 imread()函数[通俗易懂]

cv2 imread()函数[通俗易懂]

cv2 imread()函数[通俗易懂]

    控制台输出:

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.net/129610.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • cuda包卸载_之前安装过cuda卸载不彻底

    cuda包卸载_之前安装过cuda卸载不彻底不小心把/usr/local/cuda删除了,卸载cuda后安装cuda后/usr/local下没有cuda文件夹.运行:sudoapt-getautoremove–purgecuda

    2022年8月6日
    5
  • 京东自动签到「建议收藏」

    京东自动签到「建议收藏」结果展示第一步:GitHub注册1.首先打开官网GitHub2.注册页面填入信息(如有账号不需要这一步)第二步:Sever酱配置1.打开server酱的官网http://sc.ftqq.com/3.version2.点击右上角登入链接3.会跳入GitHub授权页,在该页面填入你的上方注册的GitHub账号4.点击上方微信推送,然后点击页面中的开始绑定5.掏出手机,打开微信,扫描屏幕上的二维码,如果未关注,先关注,然后在绑定即可。6.绑定后,点击上方的发送消息链接,就可

    2026年1月19日
    8
  • Hbuilder正则替换「建议收藏」

    左边:(([0-9]{2,3})px)分组,$1为最外一层括弧;$len为里面一层括弧右边:ab($2)rem$2为源字符中数据,其他为新加的效果:body{font-size:12px;line-hei…

    2022年4月15日
    189
  • 集合类学习

    集合类学习

    2021年11月12日
    38
  • SpringCloud系列之API网关(Gateway)服务Zuul

    SpringCloud系列之API网关(Gateway)服务Zuul

    2020年11月19日
    184
  • 微机原理与接口技术知识点整理复习–纯手打

    微机原理与接口技术知识点整理复习–纯手打明天就要考试了,来一波知识点整理。都会了,期末考试你不过你来找我!第一章1.按微处理器的字节分类4位微处理器8位微处理器16位微处理器32位微处理器2.这个必须背,不是简答就是简答,肯定出简答3.系统软件给一个实例判断是否是系统软件!常见的系统软件:操作系统、程序语言设计、语言处理程序、数据库管理程序、系统辅助处理程序第二章1….

    2022年6月12日
    41

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号