Skip to content

Instantly share code, notes, and snippets.

@tosuke
Created November 3, 2016 14:26
Show Gist options
  • Save tosuke/109ecc090263a6b80a6a448283dfa3c7 to your computer and use it in GitHub Desktop.
Save tosuke/109ecc090263a6b80a6a448283dfa3c7 to your computer and use it in GitHub Desktop.
opencvとnumpyが必要
import argparse
import cv2
import numpy as np
def showImg(img):
cv2.namedWindow("preview", cv2.WINDOW_NORMAL)
cv2.imshow("preview", img);
cv2.waitKey(0)
parser = argparse.ArgumentParser(description='Convert めるアイコン2016 to めるアイコン3')
parser.add_argument('infile', nargs=1)
parser.add_argument('-o', '--out')
args = parser.parse_args();
img = cv2.imread(args.infile[0])
grayImg = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
#輪郭を得る
#60くらいを閾値として二値化
_, mask_inverse = cv2.threshold(grayImg, 60, 255, cv2.THRESH_BINARY)
mask = cv2.bitwise_not(mask_inverse)
mask = cv2.cvtColor(mask, cv2.COLOR_GRAY2BGR)
mask_inverse = cv2.cvtColor(mask_inverse, cv2.COLOR_GRAY2BGR)
rinkaku = cv2.bitwise_and(img, mask)
#本体をHSVに変換して処理
img = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
#要素ごとに分割する
img_h, img_s, img_v = cv2.split(img)
img_s = (img_s * 0.85).astype(np.uint8)
img_v = np.ones_like(img_v) * 255
img = cv2.merge((img_h, img_s, img_v))
img = cv2.cvtColor(img, cv2.COLOR_HSV2BGR)
#輪郭をHSVに変換して処理
rinkaku = cv2.cvtColor(rinkaku, cv2.COLOR_BGR2HSV)
rinkaku_h, rinkaku_s, rinkaku_v = cv2.split(rinkaku)
rinkaku_s = (rinkaku_s * 0.75).astype(np.uint8) #輪郭はかなり強めに彩度を落とす
rinkaku_v = (rinkaku_v * 1.5).astype(np.uint8) #明度上げる
rinkaku = cv2.merge((rinkaku_h, rinkaku_s, rinkaku_v))
rinkaku = cv2.cvtColor(rinkaku, cv2.COLOR_HSV2BGR)
#輪郭と合成
img = cv2.bitwise_and(img, mask_inverse)
img = cv2.bitwise_or(img, rinkaku)
showImg(img)
#出力先が指定されていれば出力
if(not args.out is None):
cv2.imwrite(args.out, img)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment