线性渐层填色
这篇教学会介绍使用 OpenCV 搭配 NumPy,产生线性渐层填色 ( 实色渐层、半透明渐层 ) 的图像。
因为程序中的 OpenCV 会需要使用镜头或 GPU,所以请使用本机环境 ( 参考:使用 Python 虚拟环境 ) 或使用 Anaconda Jupyter 进行实作 ( 参考:使用 Anaconda ) ,并安装 OpenCV 函数库 ( 参考:OpenCV 函数库 )。
产生实色线性渐层
通常一般的图片在程序的结构里,都是使用“三维数组”表现。
因此可以使用 NumPy 的 zeros 方法,快速产生一个全黑的三维数组,搭配 for 循环与 NumPy 的数组赋值机制,就能快速产生渐层数组,由于 NumPy 数组内容默认为 64 位 float 类型,而 OpenCV 的 imshow 不能印出该类型,必须经过“astype('float32')/255”转换后才能正常显示 ( 如果使用 imwrite 储存则没有影响 ),下方的程序码执行后,会产生从上往下的绿色渐层。
参考:数组项目赋值
import cv2
import numpy as np
w, h = 400, 400
img1 = np.zeros([h,w,3])
for i in range(h):
img[i,:,1] = int(256*i/400) # 從上往下填入綠色漸層
img = img.astype('float32')/255 # 轉換內容類型
cv2.imshow('oxxostudio', img)
cv2.waitKey(0) # 按下任意鍵停止
cv2.destroyAllWindows()
下方的程序码执行后,会产生左上到右下的紫色渐层
import cv2
import numpy as np
w = 400
h = 400
img = np.zeros([h,w,3])
for i in range(h):
for j in range(w):
img[i,j,0] = int(256*(j+i)/(w+h))
img[i,j,2] = int(256*(j+i)/(w+h))
img = img.astype('float32')/255
cv2.imshow('oxxostudio', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
产生半透明线性渐层
如果将表现图片像素数组改成四个项目,就可以加入透明度的色版 ( alpha channel ),透明度范围从 0~255,0 表示全透明,255 表示不透明,储存为 png 格式就可以看到半透明的渐层,下方的程序码会产生从上往下黑色到透明的渐层。
import cv2
import numpy as np
w = 400
h = 400
img = np.zeros([h,w,4]) # 第三個值為 4
for i in range(h):
img[i,:,3] = int(256*i/400) # 設定第四個值 ( 透明度 )
img = img.astype('float32')/255
cv2.imwrite('oxxostudio.png', img) # 儲存為 png
cv2.waitKey(0)
cv2.destroyAllWindows()
微信扫码关注
抖音扫码关注