📅  最后修改于: 2020-08-25 01:23:27             🧑  作者: Mango
在上一节中,我们主要学习了在Python中显示图像https://www.imangodoc.com/4417.html
在本节中,我们主要学习如何利用imread读取图像数据。
您可以使用opencv库将图像读取到numpy数组中。该阵列包含像素级数据。并且根据要求,您可以通过更新数组值来修改像素级别的图像数据, 如果想熟练的掌握numpy的相关操作,你可以阅读我们相关文章https://www.imangodoc.com/3495.html
要使用OpenCV在Python中读取图像,请使用cv2.imread()函数。imread()根据图像中存在的颜色通道数返回2D或3D矩阵。对于二进制或灰度图像,二维数组就足够了。但是对于彩色图像,您需要3D阵列。
cv2.imread(image_path, flag)
其中/路径/到/图片必须是图像完整的绝对路径。该标志是可选的,并且可以为该标志传递以下可能的值之一。
在此示例中,我们将读取彩色图像。由于flag
参数的默认值为cv2.IMREAD_COLOR
,因此我们没有显式传递该标志。
opencv 默认读入未BGR图像
import cv2 #read image img = cv2.imread('./image.jpg') #print its shape print('Image Dimensions :', img.shape)
运行上面的python程序,您将获得输出Image Dimensions : (400, 640, 3)
, 说明是一个3D的张量,分别代表(高度,宽度,通道数)。图像的高度为400像素,宽度为640,图像中有三个颜色通道。对于cv2.IMREAD_COLOR,即使存在透明通道也将被忽略。
在此示例中,我们将图像读取为灰度图像。输入可以是彩色图像或灰度图像。但是,如果flag参数为cv2.IMREAD_GRAYSCALE
,则将图像读取为灰度图像。
import cv2 img = cv2.imread('D:/image-1.png', cv2.IMREAD_GRAYSCALE) print('Image Dimensions :', img.shape)
输出:Image Dimensions : (400, 640)
,只有一个通道。
在此示例中,我们将读取具有透明通道的图像。如果图像中有透明通道,则可以传递cv2.IMREAD_UNCHANGED来读取透明通道以及颜色通道。
import cv2 img = cv2.imread('D:/image-1.png', cv2.IMREAD_UNCHANGED) print('Image Dimensions :', img.shape)
输出:Image Dimensions : (400, 640
,4)
,图像拥有有四个通道。即红色,绿色,蓝色和透明性。
imread()将图像解码成矩阵,并分别以Blue,Green,Red和A(透明性)的顺序存储色彩通道。
如果(400,640,4)是图像的形状,则
你也可以通过opencv自带的函数cv2.split(image)来获取不同的通道,返回格式为List,分别代表B,G,R,A。
基于操作系统,压缩技术等,有许多用于图像的扩展名。
当imread()方法读取图像时,它不会考虑图像文件名的扩展名来确定图像的格式。但是根据文件数据中存在的格式决定扩展名。
imread()在所有平台上都支持JPEG,PNG和TIFF。但是对于其他格式和操作系统的组合,imread()可能会考虑操作系统级别的编解码器。对于这些特殊情况,您可以参考imread()的官方文档。
——>>>>感谢你的阅读与支持