LoginSignup
2
0

More than 1 year has passed since last update.

[Python][OpenCV]グレースケール画像を単色濃淡画像に変換する

Last updated at Posted at 2021-06-05

はじめに

目標:Pythonを用いて,グレースケール(またはカラー画像をグレースケール化したもの)を単色の濃淡で表したい.例えばこういう感じ (https://www.qam-web.com/?p=13378)

検索してもサンプルコードに行き当たらなかったので,実装した.

方法

画像をHSV色調で考えて,彩度に画素値を入れることで擬似的に表現した.
色相参考:https://www.peko-step.com/html/hsv.html

実行環境

Python 3.8.8
anaconda 4.10.1
opencv 4.0.1

OpenCV導入: https://qiita.com/SatoshiGachiFujimoto/items/94da93f88578b87f6a89
(上記のanacondaではデフォルトでインストール済みだった)

元画像

Lena (https://en.wikipedia.org/wiki/File:Lenna_(test_image).png) を使用.
コードと同じディレクトリに入れておく.

コード

import numpy as np
import cv2

def main():
    img = cv2.imread('Lenna_(test_image).png', cv2.IMREAD_GRAYSCALE)
    img_color = gray2SingleColor(img, 0) # 第2因数をHSV色調のHで指定,0は赤
    cv2.imshow("image", img_color)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    return

def gray2SingleColor(img, h_hsv): # 黒の部分を指定色に置き換え
    height, width = img.shape[:2]
    hsv = np.zeros((height, width, 3))
    hsv[:, :, 0] = h_hsv/2  # 0-179 for opencv
    hsv[:, :, 1] = (255-img)
    hsv[:, :, 2] = 255
    im = cv2.cvtColor(np.array(hsv, np.uint8), cv2.COLOR_HSV2BGR)
    return im

def gray2SingleColor_rev(img, h_hsv): # 画像強度が大きいところを指定色の濃さに置き換え
    height, width = img.shape[:2]
    hsv = np.zeros((height, width, 3))
    hsv[:, :, 0] = h_hsv/2  # 0-179 for opencv
    hsv[:, :, 1] = img
    hsv[:, :, 2] = 255
    im = cv2.cvtColor(np.array(hsv, np.uint8), cv2.COLOR_HSV2BGR)
    return im

if __name__ == '__main__':
    main()

結果

グレースケール読み取り(変換前)

image.png

黒の部分を指定色に置き換え

image.png

画像強度が大きいところを指定色の濃さに置き換え

image.png

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