ブラシ状の線を描く
ブラシ状の線を描きます。中心を濃く外ほど薄くドットを描くことでブラシで描画したように見せます。濃淡をつけるためにガウス分布の乱数を生成するrandom.gaussモジュールを用いてドットの座標を計算します。
環境
コード
モジュールrandom.gaussにより平均0のガウス分布を生成しそれを距離r、random.uniformにより0~2πの均等な分布を生成し角度Θとし、極座標r、Θから直行座標に変換、該当するドットの色を変換します。これを(x, y)を中心として100ドット行いブラシ状の線にします。
import numpy as np import random import math import cv2 img = np.zeros((500, 500, 3), np.uint8) # 描画用黒画像 # ブラシ描画用関数 def brush(x, y, color, sigma): for i in range(100): r = random.gauss(0, sigma) theta = random.uniform(0, 2*math.pi) img[int(y+r*math.sin(theta)), int(x+r*math.cos(theta)), 0] = color[0] img[int(y+r*math.sin(theta)), int(x+r*math.cos(theta)), 1] = color[1] img[int(y+r*math.sin(theta)), int(x+r*math.cos(theta)), 2] = color[2] # (x, y) = (100, 200)→(300, 200)までσ10の白のブラシを描画 for i in range(100, 300): brush(i, 200, (255, 255, 255), 10) # (x, y) = (300, 200)→(300, 400)までσ20の黄色のブラシを描画 for i in range(200, 400): brush(300, i, (0, 255, 255), 20) cv2.imwrite('brush.png', img)
実行結果
以下のサイトを参考にさせていただきました
Pythonの文法メモ > 【OpenCV】画像読み出しとサイズ・画素情報取得、切り抜き、貼り付け、チャネル操作
Pythonの文法メモ > 【Numpy】インデックス・スライスによるndarray要素の取得