Help us understand the problem. What is going on with this article?

OpenCVで描画してみよう

More than 1 year has passed since last update.

はじめに

色について

  • OpenCVは、RGBではなくBGR(青、緑、赤)の順番です
  • 色の指定をするときは注意が必要です

画像のグレー変換

2種類あり、方法2のほうがよく使われているようです

  • 方法1
import cv2 

img = cv2.imread("img.jpg",0)
cv2.imwrite("gray.jpg",img)
  • 方法2
import cv2 

img = cv2.imread("img.jpg")
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
cv2.imwrite("gray2.jpg", gray)

直線の描画

  • line関数を使います
  • (x0, y0)、(x1, y1)のように座標を指定し、線を引きます
import cv2
import numpy as np

# 画像ではなくまっさらな下地となる200x300の黒い画像を生成
# zerosの引数がheightが先になるので注意
height = 300
width = 200
img = np.zeros((height, width, 3), np.uint8)


# 線を引く(線を引く画像、座標、線の色、線の太さをパラメータに指定)
# 細めの赤線
img = cv2.line(img,(0,0),(width,height),(0,0, 255),1)
# 太めの青線
img = cv2.line(img,(width,0),(0,height),(255,0, 0),5)
cv2.imwrite("line.jpg", img)

line.jpg

長方形の描画

  • rectangle 関数を使います
  • 左上の座標と右下の座標の指定します
img = cv2.rectangle(img,(10,20),(150,60),(255,255,0),3)

テキストの追加

※ 日本語には対応していません

  • putText 関数を使います
  • fontはいくつか用意されています
  • 座標は、テキストの書き始めの左下の位置
  • cv2.LINE_AA は線の種類で、これ推奨
font = cv2.FONT_HERSHEY_SIMPLEX
cv2.putText(img,'ABC',(10,180),font,2,(255,0,255),3,cv2.LINE_AA)

長方形とテキストの組み合わせ

  • 上記を組み合わせてみます
import cv2
import numpy as np

# 画像ではなくまっさらな下地となる200x300の黒い画像を生成
# zerosの引数がheightが先になるので注意
height = 300
width = 200
img = np.zeros((height, width, 3),np.uint8)

# 長方形(水色の長方形)
img = cv2.rectangle(img,(10,20),(150,60),(255,255,0),3)

# 文字 (線の種類の指定ありなしで、比較すると微妙に違いが見える)
font = cv2.FONT_HERSHEY_SIMPLEX
cv2.putText(img,'ABC',(10,125),font,2,(255,0,255),3)
cv2.putText(img,'ABC',(10,180),font,2,(255,0,255),3, cv2.LINE_AA)

# 長方形の中に文字をいれる(文字は左下の座標のため、ややずれてるのがわかる)
img = cv2.rectangle(img,(10,220),(140,270),(255,255,255),2)
cv2.putText(img,'12345',(15,250),font, 0.75,(255,255,255),2)
cv2.imwrite("rect_text.png", img)

rect_text.png

白紙画像

OpenCVの描画とは直接関係がないですが、下地画像を黒ではなく白にすることもできます。

  • 上記では、np.zeros関数で下地が黒の画像を作りましたが、np.full関数を使うと白にできます
  • np.zerosは、すべてをゼロで埋めていましたが、np.fullでは初期値に255を指定します。
    255ではなく、127あたりにすると灰色になります。
import cv2
import numpy as np

height = 300
width = 200
img = np.full((height, width, 3), 255, np.uint8)
cv2.imwrite("white.png", img)
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした