完成网站群建设,百度下载安装最新版,做设计的搜素材上什么网站,公司的网站怎么做《数字图像处理-OpenCV/Python》连载#xff08;10#xff09;图像属性与数据类型 本书京东优惠购书链接#xff1a;https://item.jd.com/14098452.html 本书CSDN独家连载专栏#xff1a;https://blog.csdn.net/youcans/category_12418787.html 第2章 图像的数据格式
在P…《数字图像处理-OpenCV/Python》连载10图像属性与数据类型 本书京东优惠购书链接https://item.jd.com/14098452.html 本书CSDN独家连载专栏https://blog.csdn.net/youcans/category_12418787.html 第2章 图像的数据格式
在Python语言中OpenCV以Numpy数组存储图像对图像的访问和处理都是通过Numpy数组的操作来实现的。 本章内容概要
介绍Python语言中OpenCV的数据结构学习获取图像的基本属性。学习使用Numpy数组实现图像的创建、复制、裁剪、拼接、拆分与合并的方法。学习使用查找表LUT快速实现像素值的替换。 2.1 图像属性与数据类型 2.1.1 图像颜色分类
按照图像颜色分类图像可以分为二值图像、灰度图像和彩色图像。
二值图像只有黑色和白色两种颜色的图像。每个像素点的像素值可以用0/1或0/255表示0表示黑色1或255表示白色。灰度图像只有灰度的图像。每个像素点的像素值可以用8bit数字[0, 255]表示灰度级如0表示纯黑255表示纯白。彩色图像彩色图像可以采用蓝色B、绿色G和红色R三个颜色通道的组合来表示。每个像素点可以用3个 8bit 数字[0, 255]分别表示红色、绿色和蓝色的颜色分量如(0,0,0) 表示黑色(0,0,255) 表示红色(255,255,255) 表示白色。
OpenCV使用BGR格式读取图像解码后按B/G/R顺序存储为多维Numpy数组而PIL、PyQt、Matplotlib等库使用的是RGB格式。
在数字图像处理中可以根据需要对图像的颜色通道顺序进行转换或将彩色图像转换为灰度图像和二值图像。 2.1.2 以Numpy数组表示数字图像
数字图像由像素点组成的矩阵来描述以多维Numpy数组来表示和处理。
OpenCV在C语言中定义的Mat类是最基本的图像存储格式。在Python语言的API中则基于Numpy库来存储和处理多维数组即以多维Numpy数组来存储和处理图像。在Python语言中OpenCV对图像的任何操作本质上都是对多维Numpy数组的操作和运算。
OpenCV中的二值图像和灰度图像用二维数组表示数组的形状是(h,w)行与列分别表示图像的高度与宽度。数组中每个元素的值表示对应行/列像素点的灰度值。二值图像是特殊的灰度图像像素值取0/1或0/255。
OpenCV中的彩色图像用三维数组(h,w,ch) 表示ch3表示通道数数据组织形式如图2-1所示。数组中的每个元素对应像素点的某种颜色分量值。
OpenCV颜色通道的顺序为B/G/R因此img[:,:,0]表示彩色图像img的B通道img[:,:,1]表示G通道img[:,:,2]表示R通道。
在OpenCV中图像的数据结构是Numpy数组因此Numpy数组的所有属性和操作方法都适用于OpenCV的图像对象。例如
img.ndim查看图像的维数彩色图像的维数为3灰度图像的维数为2。img.shape查看图像的形状(h,w,ch)即图像的行数高度、列数宽度和通道数。img.size查看图像数组元素的总数即图像像素的数量与通道数的乘积。 2.1.3 图像的数据类型
OpenCV函数对于数据类型有严格要求错误的数据类型会导致语法错误。
OpenCV中图像数据类型的参数命名格式如下。 CV_{数字位数}{数字类型}C{通道数} 例如CV_8UC3表示三通道8位无符号整型数据格式的矩阵。
OpenCV数据类型与Numpy数据类型的对照关系如表2-1所示。在图像处理中最常用的数据类型是8位无符号整型数据CV_8U对应的Numpy数据类型是uint8。
推荐在调用Numpy库函数时使用Numpy数据类型的名称而在调用OpenCV函数时使用OpenCV数据类型的名称以免发生错误。
使用img.dtype可以获得Numpy数组的数据类型使用img.astype可以把图像的数据类型转换成指定的Numpy数据类型。 【例程0201】图像属性与数据类型转换
本例程使用Numpy数组的操作方法获取图像属性和数据格式。 # 【0201】图像属性与数据类型转换
import cv2 as cv
import numpy as npif __name__ __main__:# 读取图像支持 BMP、JPG、PNG、TIFF 等常用格式filepath ../images/imgLena.tif # 读取文件的路径img cv.imread(filepath, flags1) # flags1 读取彩色图像(BGR)gray cv.imread(filepath, flags0) # flags0 读取为灰度图像# 维数(Ndim)、形状(Shape)、元素总数(Size)、数据类型(Dtype)print(Ndim of img(BGR): {}, gray: {}.format(img.ndim, gray.ndim))print(Shape of img(BGR): {}, gray: {}.format(img.shape, gray.shape)) # number of rows, columns and channelsprint(Size of img(BGR): {}, gray: {}.format(img.size, gray.size)) # size rows × columns × channelsimgFloat img.astype(np.float32) / 255print(Dtype of img(BGR): {}, gray: {}.format(img.dtype, gray.dtype)) # uint8
print(Dtype of imgFloat: {}.format(imgFloat.dtype)) # float32 运行结果
Ndim of img(BGR): 3, gray: 2
Shape of img(BGR): (512, 512, 3), gray: (512, 512)
Size of img(BGR): 786432, gray: 262144
Dtype of img(BGR): uint8, gray: uint8
Dtype of imgFloat: float32程序说明 1 彩色图像是三维Numpy数组灰度图像是二维Numpy数组。因此相同尺寸的彩色图像与灰度图像的像素数量相同但数组元素的数量不同。 2 彩色图像的形状为(h, w, 3)灰度图像的形状为(h, w)。在查看图像高度和宽度时推荐使用h, wimg.shape[:2]不推荐使用h, wimg.shape。 本书京东优惠购书链接https://item.jd.com/14098452.html 版权声明 youcansxupt 原创作品转载必须标注原文链接(https://blog.csdn.net/youcans/article/details/133561857) Copyright 2023 youcans, XUPT Crated2023-10-05
欢迎关注本书CSDN独家连载专栏 《数字图像处理-OpenCV/Python》连载: https://blog.csdn.net/youcans/category_12418787.html