Pythonでいろいろやってみる

Pythonを使った画像処理や機械学習などの簡単なプログラムを載せています。

ブラシ状の線を描く

ブラシ状の線を描きます。中心を濃く外ほど薄くドットを描くことでブラシで描画したように見せます。濃淡をつけるためにガウス分布の乱数を生成するrandom.gaussモジュールを用いてドットの座標を計算します。

環境

  • windows10 home
  • Anaconda 3/ jupyter notebook 5.6.0
  • Python 3.7.0
  • OpenCV 4.0.0
コード

モジュール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)  
実行結果

f:id:T_A_T:20200704171455p:plain

以下のサイトを参考にさせていただきました

Pythonの文法メモ > 【OpenCV】画像読み出しとサイズ・画素情報取得、切り抜き、貼り付け、チャネル操作
Pythonの文法メモ > 【Numpy】インデックス・スライスによるndarray要素の取得

ブログランキングに参加しています

にほんブログ村 IT技術ブログへ
にほんブログ村