前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >OpenCV-Python学习(4)—— OpenCV 图像对象的创建与赋值

OpenCV-Python学习(4)—— OpenCV 图像对象的创建与赋值

作者头像
Rattenking
发布2022-10-04 08:42:27
1.6K0
发布2022-10-04 08:42:27
举报
文章被收录于专栏:RattenkingRattenking

1. 学习目标

  1. 图像对象的属性;
  2. 图像对象的创建与赋值。

2. 图像对象的属性

  1. 通过 image.shape 获取图像的宽、高、通道数;
  2. 通过 image.dtype 获取图像数据类型;
  3. 通过 image.size 获取图像的像素总数。

3. 代码演示

  1. 默认使用三通道读取图片;
  2. 获取图片的宽、高、通道数;
  3. 三通道模式下图像的像素总数;
  4. 图像的数据类型;
  5. 使用灰度模式读取图片;
  6. 重复第二步到第四步的打印。
代码语言:javascript
复制
import cv2 as cv

def get_image_shape():
  # 彩色模式读取(三通道)
  image = cv.imread("./images/butterfly.jpg")
  print('shape:', image.shape)
  print('size:', image.size)
  print('dtype:', image.dtype)
  # 灰度模式读取(单通道)
  gary_image = cv.imread("./images/butterfly.jpg",0)
  print('shape:', gary_image.shape)
  print('size:', gary_image.size)
  print('dtype:', gary_image.dtype)

if __name__ == "__main__":
  get_image_shape()

4. 演示结果

在这里插入图片描述
在这里插入图片描述

5. OpenCV 和 NumPy 的关系

  1. OpenCV-Python 中一切图像数据皆 numpy.array;
  2. 创建图像就是创建 numpy.array。

6. NumPy 数据包函数

  1. 在 OpenCV 中 NumPy 的常用函数

函数名

说明

numpy.array

最重要的一个特点是其 N 维数组对象 ndarray,它是一系列同类型数据的集合,以 0 下标为开始进行集合中元素的索引。

numpy.zeros

创建指定大小的数组,数组元素以 0 来填充。

numpy.zeros_like

输出为形状和输入的numpy.array一致的矩阵,数组元素以 0 来填充。

numpy.asarray

从已有的数组创建数组,numpy.asarray 类似 numpy.array,但 numpy.asarray 参数只有三个,比 numpy.array 少两个。

numpy.copy

返回给定 numpy.array 的深拷贝。

numpy.reshape

不改变数据的条件下修改形状。

7. OpenCV 中 NumPy 的常用函数的解释

7.1 numpy.array
7.1.1 实例
代码语言:javascript
复制
numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)
7.1.2 参数说明

名称

说明

object

数组或嵌套的数列。

dtype

数组元素的数据类型,可选。

copy

对象是否需要复制,可选。

order

创建数组的样式,C为行方向,F为列方向,A为任意方向(默认)。

subok

默认返回一个与基类类型一致的数组。

ndmin

指定生成数组的最小维度。

7.2 numpy.zeros
7.2.1 实例
代码语言:javascript
复制
numpy.zeros(shape, dtype = float, order = 'C')
7.2.2 参数说明

名称

说明

shape

数组形状。

dtype

数据类型,可选。

order

可选,‘C’ – 按行,‘F’ – 按列,‘A’ – 原顺序,‘k’ – 元素在内存中的出现顺序。

7.3 numpy.zeros_like
7.3.1 实例
代码语言:javascript
复制
numpy.zeros_like(a, dtype = None, order = 'K', subok=Ture)
7.3.2 参数说明

名称

说明

a

任意形式的输入参数,可以是,列表, 列表的元组, 元组, 元组的元组, 元组的列表,多维数组。

dtype

数据类型,可选。

order

可选,‘C’ – 按行,‘F’ – 按列,‘A’ – 原顺序,‘k’ – 元素在内存中的出现顺序。

subok

如果是True,新创建的数组使用a的子类类型。

7.4 numpy.asarray
7.4.1 实例
代码语言:javascript
复制
numpy.asarray(a, dtype = None, order = None)
7.4.2 参数说明

名称

说明

a

任意形式的输入参数,可以是,列表, 列表的元组, 元组, 元组的元组, 元组的列表,多维数组。

dtype

数据类型,可选。

order

可选,‘C’ – 按行,‘F’ – 按列,‘A’ – 原顺序,‘k’ – 元素在内存中的出现顺序。

7.5 numpy.copy
7.5.1 实例
代码语言:javascript
复制
numpy.copy(a, order=‘K’)
7.5.2 参数说明

名称

说明

a

任意形式的输入参数,可以是,列表, 列表的元组, 元组, 元组的元组, 元组的列表,多维数组。

order

可选,‘C’ – 按行,‘F’ – 按列,‘A’ – 原顺序,‘k’ – 元素在内存中的出现顺序。

7.6 numpy.reshape
7.6.1 实例
代码语言:javascript
复制
numpy.reshape(a, newshape, order='C')
7.6.2 参数说明

名称

说明

a

任意形式的输入参数,可以是,列表, 列表的元组, 元组, 元组的元组, 元组的列表,多维数组。

newshape

整数或者整数数组,新的形状应当兼容原有形状。

order

可选,‘C’ – 按行,‘F’ – 按列,‘A’ – 原顺序,‘k’ – 元素在内存中的出现顺序。

8. 创建图像

8.1 创建图像最常用的函数

函数名

说明

numpy.zeros

创建一个黑色背景图像。

numpy.zeros_like

创建一个与输入图像大小一致的黑色背景图像。

numpy.ones

创建一个全部像素值是1的图像。

8.2 图像赋值
8.2.1 创建图像
  1. 图像赋值就是给 numpy array 数组赋值。
  2. 创建一个 500*500 的三通道的黑色图片
代码语言:javascript
复制
image = np.zeros((500,500,3))
  1. 创建一个 500*500 的三通道的白色图片
代码语言:javascript
复制
image = np.zeros((500,500,3))
image[:] = 255
  1. 创建一个 500*500 的三通道的蓝色图片
代码语言:javascript
复制
image = np.zeros((500,500,3))
image[:] = (255,0,0)
8.2.2 创建图像代码
  1. 创建一个500*500的三通道黑色图像;
  2. 深度拷贝一个numpy array;
  3. 然后赋值为255(白色);
  4. 深度拷贝一个numpy array;
  5. 然后赋值为 (255,0,0)(蓝色)。
代码语言:javascript
复制
import cv2 as cv
import numpy as np

def create_image():
  # 创建一个500*500的三通道黑色图像
  image = np.zeros((500,500,3))
  cv.imshow("zeros", image)
  # 创建一个500*500的三通道白色图像
  white_image = np.copy(image)
  white_image[:] = 255
  cv.imshow("white_image", white_image)
  # 创建一个500*500的三通道蓝色图像
  blue_image = np.copy(image)
  blue_image[:] = (255,0,0)
  cv.imshow("blue_image", blue_image)
  cv.waitKey(0)
  cv.destroyAllWindows()

if __name__ == "__main__":
  create_image()
8.2.3 演示结果
在这里插入图片描述
在这里插入图片描述
8.2.4 创建上半蓝色下半红色图像演示代码
代码语言:javascript
复制
import cv2 as cv
import numpy as np

def create_many_color():
  image = np.zeros((300,300,3))
  image[0:150] = (255,0,0)
  image[150:300] = (0,0,255)
  cv.imshow("image", image)
  cv.waitKey(0)
  cv.destroyAllWindows()

if __name__ == "__main__":
  create_many_color()
8.2.5 创建上半蓝色下半红色图像演示结果
在这里插入图片描述
在这里插入图片描述

9. 总结

  1. 在 OpenCV-Python 中一切图像数据皆 numpy.array;
  2. 创建图像就是创建 numpy.array;
  3. OpenCV-Python 支持的常用数据类型:np.uint8、np.float32、np.int32、np.int64。
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-09-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 学习目标
  • 2. 图像对象的属性
  • 3. 代码演示
  • 4. 演示结果
  • 5. OpenCV 和 NumPy 的关系
  • 6. NumPy 数据包函数
  • 7. OpenCV 中 NumPy 的常用函数的解释
    • 7.1 numpy.array
      • 7.1.1 实例
      • 7.1.2 参数说明
    • 7.2 numpy.zeros
      • 7.2.1 实例
      • 7.2.2 参数说明
    • 7.3 numpy.zeros_like
      • 7.3.1 实例
      • 7.3.2 参数说明
    • 7.4 numpy.asarray
      • 7.4.1 实例
      • 7.4.2 参数说明
    • 7.5 numpy.copy
      • 7.5.1 实例
      • 7.5.2 参数说明
    • 7.6 numpy.reshape
      • 7.6.1 实例
      • 7.6.2 参数说明
  • 8. 创建图像
    • 8.1 创建图像最常用的函数
      • 8.2 图像赋值
        • 8.2.1 创建图像
        • 8.2.2 创建图像代码
        • 8.2.3 演示结果
        • 8.2.4 创建上半蓝色下半红色图像演示代码
        • 8.2.5 创建上半蓝色下半红色图像演示结果
    • 9. 总结
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档