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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 4. Qt的容器类

    4. Qt的容器类

    2022年1月24日
    40
  • 航姿基准系统_航姿系统原理

    航姿基准系统_航姿系统原理AHRS称为航姿参考系统包括多个轴向传感器,能够为飞行器提供航向,横滚和侧翻信息,这类系统用来为飞行器提供准确可靠的姿态与航行信息。航姿参考系统包括基于MEMS的三轴陀螺仪,加速度计和磁强计。航姿参考

    2022年8月5日
    7
  • C–C语言中volatile关键字的作用[通俗易懂]

    C–C语言中volatile关键字的作用[通俗易懂]转载:http://blog.csdn.net/tigerjibo/article/details/7427366一.前言1.编译器优化介绍:由于内存访问速度远不及CPU处理速度,为提高机器整体性能,在硬件上引入硬件高速缓存Cache,加速对内存的访问。另外在现代CPU中指令的执行并不一定严格按照顺序执行,没有相关性的指令可以乱序执行,以充分利用CPU的指令流水线,提高

    2022年5月8日
    35
  • python删除文件中指定内容

    python删除文件中指定内容lines=[lforlinopen("file.txt","r")ifl.find("20150723",0,8)!=0]fd=open("file.txt","w")fd.writelines(lines)fd.close()开头是20150723的行删除

    2022年5月29日
    38
  • Google虚拟机_免费google账号

    Google虚拟机_免费google账号 GoogleAppEngine是Google推出的免费虚拟主机空间,其实这比一般虚拟主机强悍的多,你可以利用GoogleAppEngine工具来开发网站或制作网络应用程序,Google会在自己的庞大服务器集群上为你提供空间、带宽、资源等。目前GoogleAppEngine为每个用户提供10个Application(简称App),每个App有500M免费空间,每个App限制100

    2022年10月15日
    0
  • jetbrains全家桶激活码 淘宝上卖的怎么来的【2021最新】

    (jetbrains全家桶激活码 淘宝上卖的怎么来的)JetBrains旗下有多款编译器工具(如:IntelliJ、WebStorm、PyCharm等)在各编程领域几乎都占据了垄断地位。建立在开源IntelliJ平台之上,过去15年以来,JetBrains一直在不断发展和完善这个平台。这个平台可以针对您的开发工作流进行微调并且能够提供…

    2022年3月22日
    43

发表回复

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

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