はじめに
目標: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()