Python, OpenCVで指定した色の抽出と別の色への置換を実装する

Python, OpenCVで指定した色の抽出と別の色への置換を実装します.
本稿では,Cityscapesデータセットのカラーマスキング画像の内,人だけを抽出し,白色に置換します.

全国630店舗以上!もみほぐし・足つぼ・ハンドリフレ・クイックヘッドのリラクゼーション店【りらくる】

# 特定の色を抽出する

ここでは特定の色を抽出して,人のマスキングのみを残した画像を作成します.
人のマスキングのRGBは,cityscapesScripts/cityscapesscripts/helpers/labels.py (opens new window)よりRGB=(220, 20, 60)となります.
以下のコードではBGRをベースに抽出しています.

import cv2
import numpy as np

image = cv2.imread('color_mask_image.png') # ファイル読み込み

# bgrでの色抽出
bgrLower = np.array([60, 20, 220])    # 抽出する色の下限(bgr)
bgrUpper = np.array([60, 20, 220])    # 抽出する色の上限(bgr)
img_mask = cv2.inRange(image, bgrLower, bgrUpper) # bgrからマスクを作成
extract = cv2.bitwise_and(image, image, mask=img_mask) # 元画像とマスクを合成
cv2.imwrite('extract.png',extract)

color_mask_image.png

extract.png

# 特定の色を別の色に置換する

抽出した人のマスキングを特定の色,ここではBGR=(255, 255, 255)に置換します.
以下のコードで実行します.

import cv2
import numpy as np

result = cv2.imread('result.png')
# 特定の色を別の色に置換する
before_color = [60, 20, 220]
after_color = [255, 255, 255]
result[np.where((result == before_color).all(axis=2))] = after_color
cv2.imwrite('replace.png',result)

extract.png

replace.png

# 参考サイト

【python/OpenCV】画像の特定の色を抽出する方法 (opens new window)
PIL/Pillowで画像の色を高速に置換する (opens new window)
【OpenCV】 forループを使わずに指定した色を別の色に変更する (opens new window)

全国630店舗以上!もみほぐし・足つぼ・ハンドリフレ・クイックヘッドのリラクゼーション店【りらくる】

Python + ESPNetをオリジナルデータで学習する(学習編)

Python + ESPNetをオリジナルデータで学習する(学習編)

セマンティックセグメンテーションの中で軽いモデルであるESPNetv2を実装します.
本稿ではCityscapesデータセットから人のみを抽出した仮のオリジナルデータで学習を実施します.

CUDAとTensorFlow,PyTorchのversion対応について

CUDAとTensorFlow,PyTorchのversion対応について

PythonでAI系をやっていると,CUDA・TensorFlow・PyTorchのversionの違いでつまずくことが結構あります.
本稿では,CUDAとTensorFlow,PyTorchのver対応について記述します.