python画板颜色_教你在python中用不同的方式画不同颜色的画布

摘要

在这篇文章中将给大家讲解如何分别用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

复制代码

得到的效果如下:

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3l3c3lkd3Nibg==,size_16,color_FFFFFF,t_70#pic_center

注意: height写在前面

为什么Height写在前面?

就得知道opencv图像的数据结构是numpy,Image的属性,其实就是numpy的ndarray数据格式的属性。

我们可以直接获取img对象的诸多属性,例如我们打印lena图的属性,具体如下:

20201006195435156.jpg#pic_center

# -*- 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

复制代码

输出结果:

================打印图像的属性================

图像对象的类型

(256, 256, 3)

图像宽度: 256 pixels

图像高度: 256 pixels

通道: 3

图像分辨率: 196608

数据类型: uint8

12345678

复制代码

有时候我们也可以偷懒,如果我们想创建与另外一个图像尺寸相同的画布的时候,我们可以使用np.zeros_like

canvas_black = np.zeros_like(img)

1

复制代码

创建空白画布

创建空白画布的函数如下:

def InitCanvas(width, height, color=(255, 255, 255)):

canvas = np.ones((height, width, 3), dtype="uint8")

canvas[:] = color

return canvas

1234

复制代码

调用的时候传入图像的宽度、高度和画布的颜色。例如创建一个800*600 颜色为纯黑色的画布:

canvas = InitCanvas(800, 600, color=(255,255,255))

1

复制代码

创建空白画布的完整代码如下:

'''

初始化画布

'''

import cv2

import numpy as np

def init_canvas(width, height, color=(255, 255, 255)):

canvas = np.ones((height, width, 3), dtype="uint8")

canvas[:] = color

return canvas

canvas = init_canvas(200, 200, color=(125, 40, 255))

cv2.imshow('canvas', canvas)

cv2.waitKey(0)

cv2.destroyAllWindows()

1234567891011121314151617

复制代码

效果展示:

20201006193553314.png#pic_center

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值