タイトル画像
琴葉葵

今の時代、スマホアプリで簡単に画像の加工とか出来て便利だよねー

琴葉茜

顔を認識して目を大きくしたり、輪郭を変えたりってのを自動でやってくれるし、最近の技術は凄いよねー

琴葉葵

こういうのも全部プログラムでやってるんだよね?Pythonでも同じようなことって出来るの?

琴葉茜

もちろん出来るようになるよ!...まぁ色んな知識が無いと難しいけど

琴葉葵

そりゃそうだよねー

琴葉茜

だからまずは、そんな技術を学ぶきっかけになるかもしれない画像処理用ライブラリの「OpenCV」を紹介するよ!

解説画像1
琴葉葵

画像の編集以外にも画像に関係してる事なら色んなことが出来るんだね!

琴葉茜

そうなんだー
だけど、今回は簡単に画像の加工だけに注目して教えるね!

琴葉茜

まずは一番シンプルな画像の「読み込み」「表示」「保存」の方法から

解説画像2
琴葉葵

画像をpngからjpgに変換するってのも出来るんだね!!

琴葉茜

ちなみに、OpenCVで読み込んだデータは「高さx幅」のNumPyの配列型になっていて、その各要素は基本的に「(青色の大きさ,緑色の大きさ,赤色の大きさ)」の3つの要素を持ってるよ

解説画像3
琴葉葵

すごいデータ量...!!

琴葉茜

じゃあ次は画像の大きさの変更や切り抜き(トリミング)のやり方を見てみようか

解説画像4
琴葉葵

トリミングの数字はどういうふうになってるの?

琴葉茜

トリミングは四角形の左上と右下の座標を元にして、横軸と縦軸それぞれの最小値と最大値を指定する形になるんだ

解説画像5
琴葉葵

なるほど!

琴葉茜

次は、その他の編集方法を紹介するね
今回は「グレースケール」「左右反転」「回転」くらいにしておこうか

解説画像6
解説画像7
解説画像8
琴葉葵

どれもプログラムを1個追加するだけでいけるんだね!!

琴葉茜

文字や図形を追加したりもできるから、できることを知っておいて、その他の機能については自分のしたいことに合わせて調べるようにしようね

構文機能
cv2.imread(パス)
画像ファイルの読み込み
cv2.imread("image.jpg")
cv2.imwrite(パス, 画像)
画像を保存
cv2.imwrite("output.jpg", img)
cv2.imshow(名前, 画像)
画像を表示(ウィンドウ)
cv2.imshow("Window", img)
cv2.resize(画像, サイズ)
画像のリサイズ
cv2.resize(img, (200, 200))
img[y1:y2, x1:x2]
画像のトリミング(切り抜き)
cropped = img[50:150, 100:200]
cv2.flip(img, 1)
左右反転(1:左右, 0:上下, -1:両方)
cv2.flip(img, 1)
cv2.rotate(img, 回転方式)
画像の回転
cv2.rotate(img, cv2.ROTATE_90_CLOCKWISE)
cv2.GaussianBlur(画像, サイズ, σ)
ぼかし処理
cv2.GaussianBlur(img, (5,5), 0)
cv2.Canny(画像, 閾値1, 閾値2)
エッジ検出
cv2.Canny(img, 100, 200)
cv2.rectangle(img, pt1, pt2, 色, 太さ)
四角形を描画
cv2.rectangle(img, (50, 50), (100, 100), (0, 255, 0), 2)
cv2.putText(img, 文字列, 位置, フォント, サイズ, 色)
画像に文字を描く
cv2.putText(img, "Hello", (10, 50), cv2.FONT_HERSHEY_SIMPLEX, 1, (255,255,255))
cv2.waitKey(時間)
キー入力を待つ(ミリ秒)
cv2.waitKey(0)
cv2.destroyAllWindows()
すべてのウィンドウを閉じる
cv2.destroyAllWindows()
cv2.cvtColor(画像, 色変換)
色空間の変換
cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
cv2.addWeighted(img1, α, img2, β, γ)
画像の合成(ブレンド)
cv2.addWeighted(img1, 0.5, img2, 0.5, 0)
cv2.threshold(画像, 閾値, 最大値, 方法)
二値化処理
_, bin_img = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)