LoginSignup
0
0

PythonのOpencv 自分用メモ

Last updated at Posted at 2023-06-02

PythonのOpencvを扱うときの 自分用メモです。
概要などは参考サイトを見てください。

ファイル操作

画像読み込み時

cv2.imreadを使うことで画像を読み込むことができる。
パスに注意。

img = cv2.imread("ファイル名")

Python
import cv2

img = cv2.imread("sample.jpg")

読み込み確認

画像が存在するか確認したいときは、以下のように記述することで確認することができる。

Python
import os

filepath = "sample.jpg"
print("カレントパス", os.getcwd())
print("filepath が指す絶対パス", os.path.abspath(filepath))
print("ファイルが存在するかどうか", os.path.isfile(filepath))

結果

カレントパス /Users/hogehoge/development/imgs
filepath が指す絶対パス /Users/hogehoge/development/imgs/sample.jpeg
ファイルが存在するかどうか True

画像書き込み

cv2.imwriteを使うことで画像を出力できる
cv2.imwrite('ファイル名', 出力するファイル)

Python
import cv2

cv2.imwrite('sample.jpg', img)

画像操作

1920×1080のグレースケール画像を作成

np.zerosで配列の中身を0にする。
sizeが2×2なら、[[0 0][0 0]]のようになる
参考サイト

Python
import cv2
import numpy as np
size=(1920, 1080)
# 配列の中身を0にする。uint8は符号なし8ビットの数値(256通り)
black_img=np.zeros(size, np.uint8)
cv2.imwrite('black.jpg', black_img)

# 白画像はcv2.imwriteの前に「white_img=black_img+255」を追加。
# cv2.imwrite('black.jpg',black_img) -> cv2.imwrite('white.jpg',white_img)に変更

1920×1080のカラー画像を作成

np.zerosで配列の中身を0にする。
sizeが2×2なら、 [[[0 0 0][0 0 0]][[0 0 0][0 0 0]]]のようになる

Python
import cv2
import numpy as np
size=(1920, 1080, 3)
# 配列の中身を0にする。uint8は符号なし8ビットの数値(256通り)
black_img=np.zeros(size, np.uint8)
cv2.imwrite('black.jpg', black_img)

画像の縦と横の長さ(サイズ)を求める。

20×60の画像を読み込んだ場合。
参考サイト

Python
import cv2
import numpy as np
img = cv2.imread(filename, 0)
height, width = img.shape[:2]

print(height)  # 20
print(width)  # 60
# (縦,横,チャンネル)
print(img.shape)  # (20, 60, 3)
# 縦*横*チャンネル
print(img.size)  # 3600

RGB値を表示

参考サイト

Python
import cv2
import numpy as np
img = cv2.imread("sample.jpg")
# 色配置の変換 BGR→RGB
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
# numpyで扱える配列をつくる
img_array = np.asarray(img)
print(img_array[0, 0, :])
[255 255 255]#R,G,B

生成した画像のBGR→RGB変換する関数

cv2.cvtColorを使ってBGR→RGB変換することができる。

Python
import cv2

# 色配置の変換 BGR→RGB
black_img = cv2.cvtColor(black_img, cv2.COLOR_BGR2RGB)

3次元配列の要素を入れ替えることでも実現できる。

Python
import numpy as np

img_size = (16, 16, 3)
black_img = np.zeros(img_size, np.uint8)
#ここから変換
for i in range(len(black_img)):
    for j in range(len(black_img[i])):
        print(black_img[i, j])
        black_img[i, j, 0], black_img[i, j, 2] = black_img[i, j, 2], black_img[i, j, 0]

このように記述することで[[[128 0 0]][[0 0 128]]]から[[[0 0 128]][[128 0 0]]]のようになる。

その他

16進数カラーコードからRGBに変換

ターミナルに背景色を表示させる
参考サイト

Python
import matplotlib.colors as mcolors

color_rgb = tuple(int(c * 255) for c in mcolors.to_rgb('#aa0000'))
print(color_rgb)
結果
(170, 0, 0)

これをカラー画像に代入することにより色の変更ができる。

Python
color_rgb = tuple(int(c * 255) for c in mcolors.to_rgb('#aa0000'))
sample_img[0, 0] = color_rgb

ANSIエスケープシーケンス

ターミナルに背景色を表示させる

Python
str1 = "\033[48;5;"
# str2の「m  \」の空白が1バイトなら1バイト分背景色が変わる。
str2 = "m  \033[0m"
text = str1 + str(166) + str2 
print(text)
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0