opencvでカラー画像作成

やること

opencvの関数を使って様々な図形を描く

なぜか

当然ながら、pythonopencv(cv2)とC++opencv(cv::)とで関数の仕様がことなります。 コーディングをしていてどっちだっけ?ってなることが多いのでメモしておきます。

 使う関数

  • 矩形cv2.rectangle()
  • cv2.circle()

コード

google colaboratoryを利用します。

矩形&円

import numpy as np
import cv2
import matplotlib.pyplot as plt
% matplotlib inline
USIZE = 256
VSIZE = 256
CHANEL = 3
MAXHEIGHT = 50
MAXWIDTH = 50

def makeImage():
  image = np.zeros((256, 256, 3))
  boxnum = 20
  
  for i in range(boxnum):
    sx = np.random.randint(0, USIZE-MAXWIDTH)
    sy = np.random.randint(0, USIZE-MAXHEIGHT)
    ex = sx + np.random.randint(1, MAXWIDTH)
    ey = sy + np.random.randint(1, MAXHEIGHT)
    color_b = np.random.randint(0, 255)
    color_g = np.random.randint(0, 255)
    color_r = np.random.randint(0, 255)
    if(i % 2 == 0):
      ## rectangle(画像, 始点(左上), 終点(右下), カラー(B,G,R), 塗りつぶし(-1))
      image = cv2.rectangle(image, (sx, sy), (ex, ey), (color_b, color_g, color_r), -1)
    else:
      ## circle(画像, 中心, 太さ, カラー(B,G,R), 塗りつぶし(-1))
      image = cv2.circle(image, (sx, sy), np.random.randint(5, 10), (color_b, color_g, color_r), -1)
  image = image.astype(np.uint8)
  plt.figure()
  plt.imshow(image)

makeImage()

出力結果

f:id:techsho:20200404142442p:plain
出力結果

参考になりそうな本(読んでないけど...)