今の時代、スマホアプリで簡単に画像の加工とか出来て便利だよねー
顔を認識して目を大きくしたり、輪郭を変えたりってのを自動でやってくれるし、最近の技術は凄いよねー
こういうのも全部プログラムでやってるんだよね?Pythonでも同じようなことって出来るの?
もちろん出来るようになるよ!...まぁ色んな知識が無いと難しいけど
そりゃそうだよねー
だからまずは、そんな技術を学ぶきっかけになるかもしれない画像処理用ライブラリの「OpenCV」を紹介するよ!
画像の編集以外にも画像に関係してる事なら色んなことが出来るんだね!
そうなんだー
だけど、今回は簡単に画像の加工だけに注目して教えるね!
まずは一番シンプルな画像の「読み込み」「表示」「保存」の方法から
画像をpngからjpgに変換するってのも出来るんだね!!
ちなみに、OpenCVで読み込んだデータは「高さx幅」のNumPyの配列型になっていて、その各要素は基本的に「(青色の大きさ,緑色の大きさ,赤色の大きさ)」の3つの要素を持ってるよ
すごいデータ量...!!
じゃあ次は画像の大きさの変更や切り抜き(トリミング)のやり方を見てみようか
トリミングの数字はどういうふうになってるの?
トリミングは四角形の左上と右下の座標を元にして、横軸と縦軸それぞれの最小値と最大値を指定する形になるんだ
なるほど!
次は、その他の編集方法を紹介するね
今回は「グレースケール」「左右反転」「回転」くらいにしておこうか
どれもプログラムを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) |
