摘要
在这篇文章中将给大家讲解如何分别用 numpy 的方法,与 numpy与cv2结合 的方法创建空白画布,创建白色画布,与创建彩色画布。在讲解过程中还会介绍 cv2 进行通道分割 cv2.split 与通道合并 cv2.merge 的两个函数的具体使用以及深究numpy的ndarray数据结构的索引与赋值。
numpy的ndarray数据结构的索引与赋值
在使用画图工具的时候, 第一件事情就是创建一个新的空白画布,我们可以指定画布的大小和颜色。
那我们如何使用opencv来创建一个空白的画布(值相同的图片) ?
其实image的数据结构上的图片,本质上就是 numpy 里面的 ndarray的对象 ,创建一个画布本质上就是创建一个同等规格的 ndarray 。
创建一个新的特定尺寸的 ndarray 我们可以使用 np.zeors 函数,我们将图像的高度(height),图像的宽度(width),以及图像的通道数 channel 以 tuple 类型 传入 np.zeros 。 再次声明是tuple类型 。
另外由于不是所有的 numpy 类型的数值,都可以放到opencv中进行图像处理.
数值取值范围在 0-255 , 我们需要指定数据类型为 uint8 unsigned integer 8-bit
np.zeros((height, width, channels), dtype="uint8") 1 复制代码
举个例子:想创建一个800 x 600 x 3 的图片,一个BGR格式的图像,我们就得这么写:
# 初始化一个空画布 300×300 三通道 背景色为黑色 canvas_black = np.zeros((600, 800, 3), dtype="uint8") 12 复制代码
得到的效果如下:
注意: height写在前面
为什么Height写在前面?
就得知道opencv图像的数据结构是numpy,Image的属性,其实就是numpy的ndarray数据格式的属性。
我们可以直接获取img对象的诸多属性,例如我们打印lena图的属性,具体如下:
# -*- coding: utf-8 -*- import numpy as np import cv2 # 导入一张图像 模式为彩色图片 img = cv2.imread('lena.jpg', cv2.IMREAD_COLOR) print("================打印图像的属性================") print("图像对象的类型 {}".format(type(img))) print(img.shape) print("图像宽度: {} pixels".format(img.shape[1])) print("图像高度: {} pixels".format(img.shape[0])) print("通道: {}".format(img.shape[2])) print("图像分辨率: {}".format(img.size)) print("数据类型: {}".format(img.dtype)) 123456789101112131415 复制代码
输出结果:
====&