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

IQ1なのでPhotoshopの代わりにOpenCVを使う

More than 1 year has passed since last update.

はじめに

 この記事はIQ1 Advent Calendar 2018の3日目です。
 私の大学はAdobeと包括契約しているので,Adobeの色々なソフトを無料で使うことができます.ですが,私はIQが1しかないのでそれらの高級ソフトを使いこなすことができません.そこで,画像をちょっと編集したいなぁ......と思った時,Photoshopの代わりにOpenCVでやることを思いつきました.
 というわけで,とても簡単な作業だけですが今まで書いたコードを供養します.ちなみに全部Pythonです.簡単な作業なので.

画像の拡大・縮小

 そもそもIQの高い皆さんはこんなことにPhotoshopすら使わないと思いますが.今から載せるコードたちは全て以下の関数を省略しています.

# 最初に画像の読み込み
src = cv2.imread("hode.jpg")

# 最後に画像の出力
cv2.imwrite("fuga.jpg", dst)

 画像のサイズを変更するとき,サイズを直接指定する場合と倍率を指定する場合があります.

# サイズを直接指定する場合
width = 640
height = 480
dst = cv2.resize(src, (width, height))

# 倍率で指定する場合
dst = cv2.resize(src, None, fx=2, fy=2)

画像のトリミング

 OpenCVでは画像は行列として解釈されるので,長方形のトリミングなら簡単です.

# 行列なのでshapeは(縦,横,色チャンネル数)の順に並んでいるので注意
h, w = src.shape[0:2]

#各端を指定
left = w//3
right = w
top = h//2
bottom = h

dst = src[top:bottom, left:right]

 他の形はIQ1だと数式で記述するしか思いつかなかったので,その中でも一番簡単な円だけ載せます.

# 切り取るサイズの背景を用意
r = 200
dst = np.ones((r, r, 3), dtype=np.uint8) * 255

# 元画像からコピーする
h, w = src.shape[0:2]
center = (h//2, w//3)
for y in range(h):
    for x in range(w):
        if np.sqrt((y-center[0])**2 + (x-center[1]**2)) <= r:
            dst[y][x] = src[y][x]

追記:srcと同じ黒画像を作成して任意の場所に図形を描く関数で白い図形を描いてcv2.bitwise_and()でマスクすればいいことに気付きました。IQ2になれましたね。

画像のグレースケール化

 もはやノーコメント

dst = cv2.cvtColor(src, cv2.COLOR_RGB2GRAY)

画像の結合

 大きな背景画像にペタペタと貼っていく感覚です。

src_list = #画像を複数用意

# 縦×横
h, w = src.shape[0:2]
layout = (3, 4)

dst = np.ones((h*layout[0], w*layout[1]), dtype=np.uint8)

for y in range(layout[0]):
    for x in range(layout[1]):
        dst[h*y:h*(y+1), w*x:w*(x+1)] = src_list[y*layout[1]+x]

 ここでIQ1なお知らせです。私はモバゲー版アイドルマスターシンデレラガールズにて、アイドルプロデュース7thアニバーサリーを走らなくてはいけないため、この記事はここで打ち切りとさせていただきます。12月10日より追記の予定です。それではみなさんさようなら。安部菜々をこれからもどうぞよろしくお願いいたします。

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
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