教你在python中用不同的方式畫不同顏色的畫布


摘要

在這篇文章中將給大家講解如何分別用numpy的方法,與numpy與cv2結合的方法創建空白畫布,創建白色畫布,與創建彩色畫布。在講解過程中還會介紹cv2進行通道分割cv2.split與通道合並cv2.merge的兩個函數的具體使用以及深究numpy的ndarray數據結構的索引與賦值。

numpy的ndarray數據結構的索引與賦值

在使用畫圖工具的時候, 第一件事情就是創建一個新的空白畫布,我們可以指定畫布的大小和顏色。

那我們如何使用opencv來創建一個空白的畫布(值相同的圖片) ?

其實image的數據結構上的圖片,本質上就是numpy里面的ndarray的對象,創建一個畫布本質上就是創建一個同等規格的ndarray

創建一個新的特定尺寸的ndarray我們可以使用np.zeors 函數,我們將圖像的高度(height),圖像的寬度(width),以及圖像的通道數channeltuple 類型傳入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
復制代碼

輸出結果

================打印圖像的屬性================
圖像對象的類型 <class 'numpy.ndarray'>
(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
復制代碼

效果展示:
在這里插入圖片描述

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM