opencv学习笔记(三):访问图片属性

opencv学习笔记(三):访问图片属性

文章目录

  • opencv学习笔记(三):访问图片属性
  • shape属性
      • 读取彩色图像的行数与列数
        • 分别读取图片行数、列数与通道数
        • 直接读取图片shape属性,以元组形式返回
      • 读取灰度图的行数与列数
  • size属性
    • 读取彩图size属性
    • 读取灰度图size属性
  • dtype属性
  • itemsize属性
  • nbytes属性
  • ndim属性
  • 程序:读取图像的基本属性
    • 读取彩图图像的基本属性
    • 读取灰度图的基本属性

频繁使用的几个图片属性:
1.shape:如果是彩色图像,则返回(行数,列数,通道数)的数组;如果是灰度图像,则返回(行数,列数)的数组
2.size:返回图像的像素总数:行数*列数*通道数
3.dtype:返回图像的数据类型

shape属性

读取彩色图像的行数与列数

shape[0]=图像行数
shape[1]=图像列数
shape[2]=图像通道数

分别读取图片行数、列数与通道数

import cv2
import numpy as np
Img = cv2.imread('1.jpg',cv2.IMREAD_UNCHANGED)
print ('The number of lines of this image is:',Img.shape[0])
print ('The number of columns of this image is:',Img.shape[1])
print ('The number of channels of this image is:',Img.shape[2])

运行结果如下:
opencv学习笔记(三):访问图片属性_第1张图片

直接读取图片shape属性,以元组形式返回

import cv2
import numpy as np
Img = cv2.imread('1.jpg',cv2.IMREAD_UNCHANGED)
print ('The shape of  this image :',Img.shape)

运行结果如下:
opencv学习笔记(三):访问图片属性_第2张图片

注意:Img.shape返回的是一个tuple,tuple=(rows,cols,channels)

读取灰度图的行数与列数

import cv2
import numpy as np
Img = cv2.imread('1.jpg',cv2.IMREAD_GRAYSCALE)
print ('该图片的行数为:',Img.shape[0])
print ('该图片的列数为:',Img.shape[1])
print ('该图片的通道数为:',Img.shape[2])

运行上述代码后,会发现程序报错:

\Traceback (most recent call last):
  File "f:\Opencv\readshap.py", line 6, in <module>
    print ('该图片的通道数为:',Img.shape[2])
IndexError: tuple index out of range

报错:数组下标越界;注意:灰度图的shape属性只有行数和列数,没有通道数(shape[2]),实际灰度图的通道数为1
直接读取灰度图的shape属性也可发现这一特点:

import cv2
import numpy as np
Img = cv2.imread('1.jpg',cv2.IMREAD_GRAYSCALE)
print ('该图片的shape属性为:',Img.shape)

运行结果如下:

[Running] python -u "f:\Opencv\readshap.py"
该图片的shape属性为: (321, 481)

[Done] exited with code=0 in 0.22 seconds

size属性

size:返回图像的像素总数:行数*列数*通道数
特别注意,灰度图的通道数为1,而不是0

读取彩图size属性

import cv2
import numpy as np
Img = cv2.imread('1.jpg',cv2.IMREAD_UNCHANGED)
print ('该图片的size属性为:',Img.size)

运行结果如下:

[Running] python -u "f:\Opencv\readshap.py"
该图片的size属性为: 463203

[Done] exited with code=0 in 0.228 seconds

读取灰度图size属性

import cv2
import numpy as np
Img = cv2.imread('1.jpg',cv2.IMREAD_GRAYSCALE)
print ('该图片的size属性为:',Img.size)

运行结果如下:

[Running] python -u "f:\Opencv\readshap.py"
该图片的size属性为: 154401

[Done] exited with code=0 in 0.208 seconds

从读取同一张图片原图形式下size属性和灰度图下size属性,也可以看出灰度图通道数为1(灰度图的size结果为原图size结果的1/3)

dtype属性

dtype:返回图像的数据类型,以字符串形式返回

import cv2
import numpy as np
Img = cv2.imread('1.jpg',cv2.IMREAD_GRAYSCALE)
print ('该图片的数据类型为:',Img.dtype)

运行结果如下:

[Running] python -u "f:\Opencv\readshap.py"
该图片的数据类型为: uint8

[Done] exited with code=0 in 0.221 seconds

itemsize属性

itemsize:单个像素的数据长度

nbytes属性

nbytes:表示图像所占的内存空间=itemsize*size

ndim属性

ndim:维度,表示shape属性的长度=len(shape)

程序:读取图像的基本属性

读取彩图图像的基本属性

import cv2
import numpy as np
Img = cv2.imread('1.jpg',cv2.IMREAD_UNCHANGED)
print('图像形状=',Img.shape) #形状,是一个tuple
print('图像维度=',Img.ndim) #维度,也是其shape属性的长度=len(shape)
print('单个数据长度=',Img.itemsize) #单个数据长度
print('图像总数据长度=',Img.size) #总长度,有多少个数据
print('图像内存占用空间=',Img.nbytes) #占用的内存空间=itemsize*size
print('图像数据类型=',Img.dtype) #数据类型,字符串形式

运行结果如下:

[Running] python -u "f:\Opencv\readshap.py"
图像形状= (321, 481, 3)
图像维度= 3
单个数据长度= 1
图像总数据长度= 463203
图像内存占用空间= 463203
图像数据类型= uint8

[Done] exited with code=0 in 0.217 seconds

读取灰度图的基本属性

import cv2
import numpy as np
Img = cv2.imread('1.jpg',cv2.IMREAD_GRAYSCALE)
print('图像形状=',Img.shape) #形状,是一个tuple
print('图像维度=',Img.ndim) #维度,也是其shape属性的长度=len(shape)
print('单个数据长度=',Img.itemsize) #单个数据长度
print('图像总数据长度=',Img.size) #总长度,有多少个数据
print('图像内存占用空间=',Img.nbytes) #占用的内存空间=itemsize*size
print('图像数据类型=',Img.dtype) #数据类型,字符串形式

运行结果如下:

[Running] python -u "f:\Opencv\readshap.py"
图像形状= (321, 481)
图像维度= 2
单个数据长度= 1
图像总数据长度= 154401
图像内存占用空间= 154401
图像数据类型= uint8

[Done] exited with code=0 in 0.218 seconds

运行结果如下:

[Running] python -u "f:\Opencv\readshap.py"
图像形状= (321, 481)
图像维度= 2
单个数据长度= 1
图像总数据长度= 154401
图像内存占用空间= 154401
图像数据类型= uint8

[Done] exited with code=0 in 0.218 seconds

你可能感兴趣的:(opencv,计算机视觉,学习,vscode,python)